Authentication




Cancel OK
B!コメントする  2013-05-23 19:38:00 by old

時間の計算II

アクセスログを見てみると「時間の計算」に多く集中してます。
時間の計算にはそれなりに需要があるっぽいです。

前回のhttp://zeijaku.net/blogcomment/?blogcomment=201205250905はあくまで古いPHPでも大丈夫なように記載していました。
その為、date関数による2038年問題などが発生します。
2038年問題に引っかからないものを作成しましたが、PHP5.3の機能を使っていますので
PHP5.2以下だと動かない点に注意してください。

// --------------------------------------------------
// 時間 差分取得
// @ PHP5.3 Over
// --------------------------------------------------
/*
* @ $s
point = 開始時間[形式:yyyy/mm/dd hh:ii:ss]
* @ $epoint = 終了時間[形式:yyyy/mm/dd hh:ii:ss]
* @ return = 差分(秒)
*/
function time
diff($spoint = false, $epoint = false)
{
$start = new DateTime($spoint);
$end = new DateTime($e
point);

$interval = $start->diff($end, true);

$d = $interval->format('%a') * 24 * 60 * 60; // spoint -> epoint 日数 => 秒数
$h = $interval->format('%h') * 60 * 60; // 時間 => 秒数
$i = $interval->format('%i') * 60; // 分 => 秒数
$s = $interval->format('%s'); // 秒数
$result = $d + $h + $i + $s;

if( $start > $end )
{
/*
* 差分がマイナスの場合はマイナス変換
*/
$result = ($result * -1);
}

return $result;
}


前回と同じ結果が返ります。

この関数では最後に「マイナス変換」というのが入っています。
今回使ったintervalではあくまで指定時間の間における差分を秒数として算出します。
そのため、過去だろうが現在だろうがそこまでの秒数を算出しますので、前回の関数と同じようにするために差分としてマイナスの場合は「-1」を掛けてやることでマイナスにしています。

2038年問題が気になるようであればこちらの関数を使われることをお勧めします。


PHP  

  • コメント
  • コメントはまだありません