2017-06-05 27 views
0

我需要檢測時間戳是否在夏令時。夏時制在php中如何工作(php和hhvm之間的區別)?

我使用此代碼來測試功能:

<?php 
date_default_timezone_set('Europe/Berlin'); 

$timestamp = $baseTimestamp = 1509234900; // Sunday, 29 October of 2017 1:55:00 GMT+02:00 DST 
$date = (new DateTime)->setTimestamp($baseTimestamp); 

echo "DateTime\t\t| Is in summer \t| Minutes passed\n"; 

for($i = 0; $i < 70; $i++) { 
    $date = (new DateTime)->setTimestamp($timestamp); 
    echo $date->format("Y-m-d H:i:s \t|I") . "\t\t| " . ($timestamp - $baseTimestamp)/60 . "\n"; 
    $timestamp = $timestamp + 60; 
} 

https://3v4l.org/dqNlK

歐洲/柏林工作,我已經看到了,在三月份的時候在2.00,我們從冬季通過到了夏天,php就解決了這個問題,但是在10月份,當它應該從夏天到冬天回到3.00時,它並不像預期的那樣工作。

在這種情況下,我們有兩個對應於同一小時的時間戳(在3是2),但時間戳是唯一的,所以對於2.00,夏天時間必須有一個時間戳,而冬天時間。

使用hhvm,它顯示正確的值,但正常的php解釋器顯示,這兩個都不是在夏天2.00(第一個,這是凌晨2點,第二個是凌晨3點,凌晨2點,這是一個應該說不再是夏天了)

+1

...實際上看起來像我的錯誤。 – CD001

+0

是的,我認爲是。試試這個: echo(new DateTime) - > setTimestamp(1509235200) - > getTimestamp(); 你會看到它輸出一個不同的時間戳。 HHVM不這樣做。 – Noogic

回答

0
function isSummer($timestamp) { 
    $date = (new DateTime)->setTimestamp($timestamp); 

    if ($date->format('I') == 1) { 
     return true; 
    } 

    return ($date->getTimestamp() > $timestamp); 
} 

我認爲這將這樣的伎倆

+0

只有當時間戳從未通過DateTime對象時,這纔會有效 – Noogic