2012-08-30 39 views
3

下面的代碼:php mktime在同一日期給出不同的結果?

// settings 1st alternative 
    $season = 2011; 
    $startweek = 36; 

    // calculation, 1st alternative 
    // in any case Jan 1st is in 1. week 
    $firstweekuniversal = mktime(0,0,0,1,4,$season); 
    // I'd like to calculate monday 0:00 of the given week. 
    // date(...) computes to monday of the calculated week. 
    $startday1 = $firstweekuniversal + 86400 * (7*($startweek-1) - date('w', $firstweekuniversal)+1); 

    // settings 2nd alternative 
    $StartingDate = "KW36 - 5.09.2011 (Mo)"; 

    // calculation, 2nd alternative 
    $firstparts = explode(" ", $StartingDate); 
    $secparts = explode(".", $firstparts[2]); 
    $startday2 = mktime(0,0,0,intval($secparts[1]),intval($secparts[0]),intval($secparts[2])); 

    // Output 
    echo "Start: \$startday1=".$startday1.", Timestamp=\"".date("d.m.Y - H:i:s", $startday1)."\"<br>\n"; 
    echo "Start: \$startday2=".$startday2.", Timestamp=\"".date("d.m.Y - H:i:s", $startday2)."\"<br>\n"; 

導致這個輸出:

Start: $startday1=1315177200, Timestamp="05.09.2011 - 01:00:00" 
Start: $startday2=1315173600, Timestamp="05.09.2011 - 00:00:00" 

哪裏是1H區別是從哪裏來的?這不可能是夏季問題,在這種情況下,1h必須是相反的,否則我錯了? 當我嘗試使用我的環境(本地主機)時,沒有什麼區別,但是在我的服務器上存在。

任何人都可以解釋這一點嗎?我在這裏完全不解。 在此先感謝,

+0

什麼時區是你的本地主機和你的服務器? –

+0

時區既是歐洲/柏林,但不應該是無關緊要的,因爲腳本運行兩種選擇? –

+0

你在本地主機和提供商上運行什麼操作系統?我在Ubuntu虛擬機上運行它,得到了與您觀察到的相同的行爲,在Ubuntu EC2實例上也是如此。它可能與一些奇怪的DST設置有關,但無法找到哪個/哪裏。 – Mikushi

回答

0

我對夏令時的理解是,在冬季和夏季之間的某個時間點,太陽開始提前上升,所以在早上8點,它會覺得它應該是早上9點......而這正是什麼時鐘確實會向前移動,通常會延遲一個小時。這也是爲什麼這是一個很好的藉口遲到在學校:)

在任何情況下,你的本地PHP的時區設置可能是UTC(或其他「中立」時區),但服務器時區設置榮譽日光儲蓄。

相關問題