2011-10-26 67 views
0

一個簡單的代碼奇怪的行爲打印日期在PHP日期

$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 

任何人有任何想法,爲什麼?

+2

這確實很有趣。你也許嘗試過,$ testDate = strtotime('+ 1 day',$ testDate); ? –

+0

此外,使用日期(「D d M」,$ testDate)而不是strftime輸出相同的文本? –

+0

該代碼工作正常,想知道... – Dev

回答

3

事實上,這就是爲什麼您不應該通過將24小時添加到時間戳來增加一天的原因。有可能您正處於夏令時的時區,10月的最後一個星期日不是24小時。

您可以通過在循環內添加echo strftime("%r %x", $testDate);來確認。 (另請注意,您可以使用多個修飾符strftime()所以您不必將它們串聯:strftime("%a %d %b", $testDate);

總是使用最新功能,如strtotime()mktime()遞增日期。

+1

你是對的。 $ testDate = strtotime('+ 1 day',$ testDate);效果最好。 – andrew

3

看起來像它涉及到DST ..時鐘變化在十月的最後一個星期日,今年太陽10月30日

注意:您還必須在「正確的」時區要做到這一點,例如這裏是:

# date [email protected] 
Mon Oct 24 22:00:00 UTC 2011 

這樣一個小時不會有什麼區別,但對你來說它確實有效。這可能是相當惱人的,因爲人們將無法再現您的問題:)

+0

DST問題是。 我在希臘 - 我們改變了我們在太陽30,十月的時間。 – andrew

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) 
0

在我的機器的輸出是:

[email protected]:~# 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 
[email protected]:~# 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版本您使用的?

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

+1

XAMPP 1.7.4 [PHP:5.3.5] 我的錯誤,因爲它似乎是$ testDate + = 86400;部分代碼。 $ testDate = strtotime('+ 1 day',$ testDate);效果最好。 – andrew