2010-05-14 276 views
1

我看看date_sunset函數在PHP中遇到了一個問題,我覺得有點奇怪。我有這樣一段代碼:PHP:奇數行爲與date_sunset函數

$sunset = date_sunset(mktime(0, 0, 0, 5, 14, 2010), 
    $format,    // Format 
    55.596041,    // Latitude 
    12.992495,    // Longitude 
    90,      // Zenith 
    2      // GMT Offset 
); 

對於三種不同的格式,這會給我:

SUNFUNCS_RET_STRING 21:05 
SUNFUNCS_RET_DOUBLE 21.095732016315 
SUNFUNCS_RET_TIMESTAMP 1273863944 // H:i:s O -> 19:05:44 +0000 

爲什麼時間戳格式忽略GMT偏移?應該是這樣嗎?如果是這樣的原因是什麼?

回答

1

date_sunset(,SUNFUNCS_RET_TIMESTAMP ,,,,)不會忽略偏移量,用於格式化時間戳值的函數是(即時區設置爲utc + 0),例如

$sunset = date_sunset(mktime(0, 0, 0, 5, 14, 2010), 
    SUNFUNCS_RET_TIMESTAMP,    // Format 
    55.596041,    // Latitude 
    12.992495,    // Longitude 
    90,      // Zenith 
    2      // GMT Offset 
); 

date_default_timezone_set('UTC'); 
echo date('H:i:s O', $sunset), "\n"; 

date_default_timezone_set('Europe/Berlin'); 
echo date('H:i:s O', $sunset), "\n"; 

date_default_timezone_set('America/New_York'); 
echo date('H:i:s O', $sunset), "\n"; 

打印

19:06:07 +0000 
21:06:07 +0200 
15:06:07 -0400 
+0

這就是這種情況!如果我先'date_default_timezone_set('Europe/Stockholm')',那麼它是正確的:)謝謝! – Svish 2010-05-14 20:58:35

3

時間戳不包含任何時區數據。它們是自Epoch以來的秒數,它是1970年1月1日00:00:00

+0

一個好辦法,看看這是做'日期( 「縮略詞,Y H:我:■」,0);'。如果你的時區不是格林尼治標準時間,你會得到一個時間從1970年1月1日00:00:00 – 2010-05-14 20:56:39