2016-08-02 8 views
0

次の設定後、time()はBritish Summer Timeのエポック時間を返すことを期待していますが、代わりにUTC/GMTを取得します。time()夏時間の値を返さない

date_default_timezone_set("Europe/London"); 

私はBSTについて調整データベースに格納された値を有し、時間(によって返される値を比較する必要があります)。システムは現在、時間差があるため、期待どおりに動作していません。時間()関数がBST時間を返す必要があるか、LondonがBSTにあるかどうかを検出してtime()から結果に3600を追加する方法が必要です。どちらの解決策も大歓迎です。

date_default_timezone_set("Europe/London"); 

// Wordpress - Getting a value from the DB 
$min_deadline = get_post_meta($id,'wdm_deadline_min',true); 

$min_signup_check = false; 
if (!empty($min_deadline) && time() >= strtotime($min_deadline)) 
    $min_signup_check = true; 
+2

それはちょうど 'time()'の働きです。代わりにDateTimeオブジェクトを使用してください – apokryfos

+0

夏時間に起因する厄介な問題の終わりがないようです。 –

+1

@JeffPuckettII夏時間は、人工光を先取りする古いコンセプトです。問題を引き起こすのはここだけです。 – apokryfos

答えて

0

以下の2つの方法があり、GMTとBSTの間の差異を返すためにgetoffsetを使用しています。

function getOffset($tzId, $time = null) { 
    if($time == null){ 
     $time = gmdate('U'); 
    } 

    $tz = new DateTimeZone($tzId); 

    $transition = $tz->getTransitions($time); 

    return $transition[0]['offset']; 
} 

function getDST($tzId, $time = null) { 
    if($time == null){ 
     $time = gmdate('U'); 
    } 

    $tz = new DateTimeZone($tzId); 

    $transition = $tz->getTransitions($time); 

    return $transition[0]['isdst']; 
}