2016-04-12 21 views
0

私のアプリケーションでは、特定の形式、すなわち'0000-04-12'(4月12日)の365日間、mysqlにvarcharフィールドがあります。今、私は、フィールドからの特定の日付が、2:00 pm、3月の第2日曜日、から、午後2時の、カルガリーカナダの夏時間帯にあるかどうかをチェックする機能を持っています。を返し、それに応じて真または偽を返します。PHPの夏時間計算

<?php 
/* 
@param $time form Database e.g. 0000-04-12 
*/ 
function isDaylightSaving($time){ 
    // to replace 0000 in start with current year 
    $today = substr_replace($time,date('Y'),0,4); 
    $date = new DateTime($today); 
    $week = $date->format('W'); 

    // TO DO 
    // find date falls between 2:00 pm Second Sunday of March to 2:00 pm First Sunday of November. 

    return ; 
} 

?> 

今のは、特定の年に関して週返すが、私は、私はget.Thanksすることができませんこれは、特定のロジックを実行するために、月に関して週をチェックする必要があります。

+0

したがって、サーバーのデフォルトのタイムゾーンに依存していますか? MySQLで日付をどのように保存しますか? UTCとして、またはオフセットが存在しますか?また、[この質問と回答](http://stackoverflow.com/questions/21946276/php-daylight-savings-conundrum)をチェックしてください。 – Mjh

+0

@Mjh私たちはDateTime initを見ることができるので、すべてのDateTimeは同じTZを持ちます。さらに、彼はここにTZインテルを持っていないようですので、提供された日付に応じて、DSTがアプライアンス内にあると想定することができます。 – Lpu8er

+0

@Mjh utcで '0000-04-12'のような文字列形式ではないと特定の問題に固執イム。 –

答えて

-1

これを試してみてください:

if($time > date('Y-m-d',strtotime('second sunday of march')) && 
    $time < date('Y-m-d',strtotime('first sunday of november'))){ 
    return true; 
}else{ 
    return false; 
} 

のstrtotime()は偉大な関数です。

-1

@Ezenhisによって与えられた例はうまく聞こえるが、いくつかの要素が欠けている。 それを拡張:あなたは日付関数から文字列を比較するべきではありません

$low = new DateTime('@'.strtotime('second sunday of march')); 
$high = new DateTime('@'.strtotime('first sunday of november')); 
if($date > $low && $date < $high) { 
    // we're good 
} 

。 DateTimeを使用することは、PHP 5.0からPHPで日時を処理するためのより良い方法です。