2017-07-03 30 views

回答

0

你可以這樣做:

$diff = date_create()->diff(new DateTime("first day of January ".date("Y"))); 
$hours = $diff->format("%a")*24 + $diff->h; 

如這裏要求的處理夏令時的方式:

$transitions = (new DateTimeZone(date_default_timezone_get()))->getTransitions(); 

$thisYearsTransitions = array_values(array_filter($transitions, function ($v) { 
    return substr($v["time"],0,strlen(date("Y"))) == date("Y"); 
})); 
if (count($thisYearsTransitions) == 2 && date_create($thisYearsTransitions[0]) < date_create() && count($thisYearsTransitions)>0 && date_create($thisYearsTransitions[1]) > date_create()) { 
    $hours = $hours + ($thisYearsTransitions[0]["offset"]-$thisYearsTransitions[1]["offset"] > 0?1:-1); 
} 

這樣做會得到今年的DST轉換,如果當前日期在第一次和第二次轉換之後下降,它將增加/減少一小時(取決於時區)。不知道這是否會奏效,還沒有測試過,但它應該。

+0

,但這是PHP 5.3 +。 TS使用5.1 –

+0

@IvoP我認爲你是 – apokryfos

+1

後面的更新啊:我看到TS將他的php從5.1升級到7.1分鐘前 –