簡體   English   中英

PHP日期中的奇怪行為

[英]strange behaviour in php date

一個簡單的代碼來打印日期

$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

有人知道為什么嗎?

看起來與DST有關。.時鍾在10月的最后一個星期日,即今年10月30日,星期日更改。

注意:您還必須處於“正確的”時區才能發生這種情況,例如,這里是:

 # date -ud@1319493600
 Mon Oct 24 22:00:00 UTC 2011

這樣一小時沒有任何區別,但對您而言卻有所不同。 這可能很煩人,因為人們將無法重現您的問題:)

實際上,這就是為什么您不應該通過在時間戳上增加24小時來增加一天的原因。 可能您所在的時區遵守夏令時,而十月的最后一個星期日不是24小時長。

您可以通過添加echo strftime("%r %x", $testDate);來確認這一點echo strftime("%r %x", $testDate); 在循環內。 (還要注意,您可以在strftime()使用多個修飾符,因此不必將它們連接起來: strftime("%a %d %b", $testDate);

始終使用日期函數(如strtotime()mktime()增加日期。

這可能與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)

在我的機器上,輸出為:

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版本?

此外,它可能與夏時制有關-也嘗試打印小時數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM