2009-04-29 7 views
1

私は二日の間の日数を計算しようとしているが、私は夏時間の問題に実行していますよ。ここに私のコードです:PHPで夏時間を無視し、2つの日付を引く方法は?

function date_diff($old_date, $new_date) { 
    $offset = strtotime($new_date) - strtotime($old_date); 
    return $offset/60/60/24; 
} 

作品罰金限り、日は両方とも同じDST期間内にあるよう:

echo date_diff('3/15/09', '3/18/09'); // 3 

でもない、彼らはさらに離れている場合:

echo date_diff('11/15/08', '3/18/09'); // 122.95833333333 

I偶数日が必要で、DSTについて気にしないでください。私は結果を丸めることができると思うが、それはkludgyを感じる。より良い(簡単な)方法がありますか?私はそれを避けることができれば一日-解析-とカウント回避 - 飛躍の年の事を記述する必要はしたくありません。

(注:これは、PHP 5.1.6で実行する必要があり、そう5.3の日付の機能の一部が利用できない場合があります。)

もう少し情報:私はオフセットを取るつもりだと追加それはdbにある他のdatetimesに、私は時間の部分ではなく、変更する唯一の日の部分が欲しいです。とにかく、私はそれを追加すると他の方向に1時間遅れてしまうので、丸めがうまくいかないことが分かります。たぶん、あなたは何が相殺されるので、GMTにタイムゾーンを設定しないようにhttp://ca3.php.net/date_default_timezone_setを使用することができます全体の問題へのより良いアプローチ....

答えて

3

があります。

代わりに、手動であなたがfloor()またはceil()を使用して、特定の方向に丸めを強制することができdate('I',$timetamp)

if (date("I") == 1) {  // "WE ARE MDT"; 
     $timeZone = "MDT"; 
} else { 
     $timeZone = "MST"; 
} 
+0

私のすべての日付計算が動作する前にこれを追加してください: date_default_timezone_set( 'UTC'); – sprugman

+0

date_default_timezone_set( 'UTC')を使用しています。それを行うには最適な方法です。あなたのページに他の日付が必要な場合は、他の日付の正確さに副作用を引き起こす可能性があることに注意してください。あなたのページに他の日付がない場合は、このコメントを無視してください。 :-) – artlung

0

を使用してオフセットを追加することができます。

7

はGMT/UTC、夏時間なしのタイムゾーンに住んで日付を強制:

function date_diff($old_date, $new_date) { 
    $offset = strtotime($new_date . " UTC") - strtotime($old_date . " UTC"); 
    return $offset/60/60/24; 
} 

echo date_diff('3/15/09', '3/18/09'); // 3 
echo date_diff('11/15/08', '3/18/09'); // 123 
+0

これは動作しますが、いくつかは、それはあなたが/ 60/60/24に手に入れたところカントを理解どのように動作するかを説明することができます... –

0

私は上記の 'UTC' コードを試してみました。 didntは私のために働く。私は小数点以下の値を得た。

差シリアル小数部が0.5の下または上のいずれかであろう日付範囲内の夏時間の日付があります。日付範囲が3/15に行く日の光の節約を持っているとき、日光が日付小数< 0.5をオフに行くされている場合、小数点値> 0.5です。だから、私はちょうどラウンド()関数にシリアルを入れて、私は日数に必要な整数を得る。

関連する問題