【发布时间】:2010-02-25 21:59:16
【问题描述】:
我需要有关生成相对于今天的过去 7 到 10 天的日期和天数的帮助。如何创建一个准确的时间戳来处理周、月和年的变化?
【问题讨论】:
我需要有关生成相对于今天的过去 7 到 10 天的日期和天数的帮助。如何创建一个准确的时间戳来处理周、月和年的变化?
【问题讨论】:
最简单的方法是使用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 秒数。
在 cmets 之后编辑:
对于月份和星期的更改,这仍然有效:一天仍然是 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
看起来也不错。
【讨论】:
如果您有幸能够使用 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 可以相对轻松地完成类似的操作,如下面的 sn-p(产生与上面相同的输出):
for ($i = 7; $i >= 0; $i--) {
var_dump(date('D d-m-Y', strtotime("-$i days")));
}
【讨论】:
for($i = 1; $i <= 10; $i++){
echo strtotime("-$i days"), PHP_EOL;
}
另请参阅此相关问题和答案:
【讨论】:
要生成过去 10 天(包括今天)凌晨 12 点的时间戳,可以使用以下代码:
<?php
for ($i=0; $i<=10; $i++) {
echo mktime (0, 0, 0, date('m'), date('d')-$i, date('Y'));
}
?>
【讨论】:
您需要的一切都可以在this page of the php manual 中找到。
【讨论】: