我需要帮助生成的日期和天数的最后七到十天相对于今天。如何创建一个准确的时间戳来处理周、月和年的变化?
发布于 2010-02-26 06:04:55
最简单的方法是使用time()函数获取与今天对应的时间戳;并将该时间戳删除7次1天,每个时间戳对应于该时间戳的日期:
$timestamp = time();
for ($i = 0 ; $i < 7 ; $i++) {
    echo date('Y-m-d', $timestamp) . '<br />';
    $timestamp -= 24 * 3600;
}这将为您提供以下输出:
2010-02-25
2010-02-24
2010-02-23
2010-02-22
2010-02-21
2010-02-20
2010-02-19由于时间戳仅表示自1970-01-01以来的秒数,因此将一天减去时间戳意味着减去24*3600秒。
注释后的编辑:
对于月和周的更改,这仍然有效:一天仍然是24*3600秒。
例如,如果您使用以下代码行进行测试,而不是我在第一个示例中发布的第一行代码:
$timestamp = strtotime('2010-02-03');您将获得以下输出:
2010-02-03
2010-02-02
2010-02-01
2010-01-31
2010-01-30
2010-01-29
2010-01-28天气转了个月的晴天。
对于闰年,如果我使用以下命令进行测试:
$timestamp = strtotime('2008-03-03');我得到了:
2008-03-03
2008-03-02
2008-03-01
2008-02-29
2008-02-28
2008-02-27
2008-02-26这看起来很好,因为2008年2月有29天。
如果我用以下命令测试:
$timestamp = strtotime('2009-03-03');我得到了:
2009-03-03
2009-03-02
2009-03-01
2009-02-28
2009-02-27
2009-02-26
2009-02-25看起来也不错。
发布于 2010-02-26 06:56:12
如果您足够幸运能够使用PHP 5.3 (何乐而不为呢?)然后,DateTime/Interval/Period类也会变得非常有用。下面的示例打印前7天(以及今天)相对于今天的日期。
$start  = new DateTime('-7 days', new DateTimeZone('UTC'));
$period = new DatePeriod($start, new DateInterval('P1D'), 7);
foreach ($period as $date) {
    var_dump($date->format('D d-m-Y'));
}它输出类似以下内容:
string(14) "Thu 18-02-2010"
string(14) "Fri 19-02-2010"
string(14) "Sat 20-02-2010"
string(14) "Sun 21-02-2010"
string(14) "Mon 22-02-2010"
string(14) "Tue 23-02-2010"
string(14) "Wed 24-02-2010"
string(14) "Thu 25-02-2010"使用strtotime可以相对容易地完成类似的操作,如下面的代码片段所示(它会产生与上面相同的输出):
for ($i = 7; $i >= 0; $i--) {
    var_dump(date('D d-m-Y', strtotime("-$i days")));
}发布于 2010-02-26 06:03:28
使用strtotime()
for($i = 1; $i <= 10; $i++){
    echo strtotime("-$i days"), PHP_EOL;
}另请参阅以下相关问题和答案:
https://stackoverflow.com/questions/2337968
复制相似问题