打印日期的简单代码
$first_date = 1319493600;
$last_date = 1320184800;
$testDate = $first_date;
while ($testDate<=$last_date)
{
echo strftime("%a", $testDate).' '. strftime("%d", $testDate).' '.strftime("%b", $testDate).'<br>';
$testDate += 86400;
}
是的,这个简单的脚本让我失败了,如下所示
Tue 25 Oct
Wed 26 Oct
Thu 27 Oct
Fri 28 Oct
Sat 29 Oct
Sun 30 Oct <----Error
Sun 30 Oct <----Error
Mon 31 Oct
Tue 01 Nov
任何人都知道为什么?
答案 0 :(得分:3)
看起来它与DST有关..时钟在十月的最后一个星期日,即今年10月30日星期日发生了变化。
注意:你也必须处于“正确”的时区才能发生这种情况,例如这里是:
# date -ud@1319493600
Mon Oct 24 22:00:00 UTC 2011
所以一小时没有任何区别,但对你而言却是如此。这可能非常烦人,因为人们将无法重现您的问题:)
答案 1 :(得分:3)
事实上,这就是为什么你不应该通过在时间戳上增加24小时来增加一天的原因。您有可能在时区观察夏令时,而10月的最后一个星期日则不是24小时。
您可以通过在循环中添加echo strftime("%r %x", $testDate);
来确认这一点。 (另请注意,您可以在strftime()
中使用多个修饰符,因此您无需连接它们:strftime("%a %d %b", $testDate);
。)
始终使用strtotime()
或mktime()
等日期函数来增加日期。
答案 2 :(得分:2)
这可能与10月30日的夏令时变化有关。尝试运行脚本并打印时间以查看更改。这是我的时区中的一个例子:
php > $first_date = 1319493600;
php > $last_date = 1320184800;
php >
php > $testDate = $first_date;
php >
php >
php > while ($testDate<=$last_date)
php > {
php { echo strftime("%a", $testDate).' '. strftime("%d", $testDate).' '.strftime("%b", $testDate). '(' . strftime("%d.%m.%Y %H:%M:%S", $testDate) . ")\n";
php { $testDate += 86400;
php { }
Mon 24 Oct(24.10.2011 23:00:00)
Tue 25 Oct(25.10.2011 23:00:00)
Wed 26 Oct(26.10.2011 23:00:00)
Thu 27 Oct(27.10.2011 23:00:00)
Fri 28 Oct(28.10.2011 23:00:00)
Sat 29 Oct(29.10.2011 23:00:00)
Sun 30 Oct(30.10.2011 22:00:00)
Mon 31 Oct(31.10.2011 22:00:00)
Tue 01 Nov(01.11.2011 22:00:00)
答案 3 :(得分:0)
在我的机器上输出为:
root@ubuntu:~# php /tmp/tst.php
Mon 24 Oct
Tue 25 Oct
Wed 26 Oct
Thu 27 Oct
Fri 28 Oct
Sat 29 Oct
Sun 30 Oct
Mon 31 Oct
Tue 01 Nov
root@ubuntu:~# php -v
PHP 5.3.5-1ubuntu7.2 with Suhosin-Patch (cli) (built: May 2 2011 23:18:30)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
您使用的是哪个PHP
版本?
此外,它可能与夏令时有关 - 尝试打印时间