2012-09-25 62 views
1

我遇到了PHP的gmstrftime()函數的問題。 請看:這是PHP的gmstrftime()函數中的一個錯誤嗎?

<? 
$ts[]=1348573985; // '2012-09-25 13:53:05' (date returned from mysql's from_unixtime() function) 
$ts[]=1233958620; // '2009-02-06 23:17:00' (date returned from mysql's from_unixtime() function) 

foreach($ts as $t) { 
    echo $t." => ".gmstrftime("%d %B %Y - %H:%M", $t)."\n"; 
} 
?> 

輸出將是:

1348573985 => 25 September 2012 - 11:53 
1233958620 => 06 February 2009 - 22:17 

正如你所看到的,第一時間標記爲2小時的休息時間(從MySQL的輸出),這是因爲時區設置正常。但第二個只有1個小時,但我沒有改變兩個gmstrftime()調用之間的時區?

這是PHP的gmstrftime()函數中的錯誤,還是其他的東西?

回答

2

the manual for gmstrftime

行爲一樣的strftime(),但返回的時間是格林威治標準時間(GMT)。

格林威治標準時間全年一樣。這與英國當地時間有所不同,冬季設定爲GMT,但夏季的「英國夏令時」(GMT + 1,即格林威治標準時間提前一小時)。西歐也是如此,冬季爲GMT + 1,夏季爲GMT + 2。

您的MySQL數據庫大概是爲歐洲本地時間配置的,因此在轉換夏季期間發生的Unix時間戳時,它會增加一個小時以與夏令時間調整對應。

在我看來,最好的策略是將所有系統設置爲使用'UTC'(基本上與GMT相同),然後轉換爲當地時區「在最後一刻」。您可以在其他時區進行標準化,但UTC作爲調試的良好基準。

+0

「最好的策略是將所有系統設置爲使用'UTC'」---我個人總是在我更喜歡的時區(我住的TZ)運行我的所有服務器,並且它的工作原理也沒有問題。 – zerkms

+0

@zerkms只要你把它留在一個設定的UTC偏移量,那麼是的,那很好。但是,如果您將其設置到某個位置並讓其對夏季/夏令時進行調整,則事情會變得令人困惑,*以我的經驗*。 – IMSoP

+0

我個人的經驗法則是:1)使用任何系統時區2)始終使用正確的日期類型,並始終使用正確的工具使用日期。這對我來說總是有效的;-) PS:http://rwec.co.uk/ ---嗯-oh ;-) – zerkms