PHPで夏時間を無視して、2つの日付を減算する方法は?
質問
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
偶数日が必要で、DSTは気にしません。結果を四捨五入できると思いますが、それは気味が悪いと感じます。より良い(簡単な)方法はありますか?私はそれを回避することができれば、丸一日の解析とカウント、回避、うるう年のことを書く必要はありません。
(注:これはphp 5.1.6で実行する必要があるため、5.3の日付機能の一部は利用できない場合があります。)
もう少し情報:オフセットを取得し、dbにある他の日付時刻に追加します。時間部分ではなく、日部分のみを変更します。とにかく、丸めが機能しないことがわかります。なぜなら、追加を行うと、反対方向に1時間ずれるからです。たぶん問題全体に対するより良いアプローチがあるでしょう。...
解決
http://ca3.php.net/date_default_timezone_set を使用してタイムゾーンを設定できますGMTなので、オフセットはありません。
または、date('I',$timetamp)
if ( date("I") == 1 ) { // "WE ARE MDT";
$timeZone = "MDT";
} else {
$timeZone = "MST";
}
他のヒント
夏時間(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
上記の「UTC」コードを試しました。私には役に立たなかった。 10進数値を取得しました。
日付範囲内に夏時間がある場合、シリアルの小数部の差は.5未満またはそれ以上になります。日付範囲の夏時間が3/15になると、10進数値は<!> gtになります。 .5デイライトが日付の10進数<!> ltから消えるとき; .5。だから、私はround()関数に差分シリアルを入れて、日数に必要な整数を取得します。