RubyクックブックをPHPに翻訳してみる。
レシピ1.5.日付の演算
タイムスタンプに秒数を加減して計算する
<?php
//タイムスタンプに秒数を加減して計算する
//2008年9月1日の10日後を求める
$date = mktime(0, 0, 0, 9, 1, 2008); //2008年9月1日
$inc_day = 10; //10日後
$one_day = 60 * 60 * 24; //1日の秒数
print_r(date('Y年m月d日', $date + $inc_day * $one_day));
// => 2008年9月11日
?>
mktime()の引数を加減して求める。
<?php
//[mktime()][3]の引数を加減して求める。
//2008年9月1日の10日後を求める
$inc_day = 10; //10日後
$date = mktime(0, 0, 0, 9, 1 + $inc_day, 2008); //2008年9月1日
print_r(date('Y年m月d日', $date));
// => 2008年9月11日
//2008年9月1日の10日前を求める
$inc_day = -10; //10日前。負の数を指定する
$date = mktime(0, 0, 0, 9, 1 + $inc_day, 2008); //2008年9月1日
print_r(date('Y年m月d日', $date));
// => 2008年8月22日
?>
月末の日付を求める。
mktime()の日に「0」を指定すると、前月の月末の日付を取得できます。
<?php
$date = mktime(0, 0, 0, 9, 0, 2008); //2008年9月0日
print_r(date('Y年m月d日', $date));
// => 2008年8月31日
?>
2つの日付の間隔を求めるには、タイムスタンプの差から日数を計算します。
<?php
$from = mktime(0, 0, 0, 9, 1, 2008); //2008年9月1日
$to = mktime(0, 0, 0, 9, 11, 2008); //2008年9月1日
$one_day = 60 * 60 * 24; //1日の秒数
$period = ($to - $from) / $one_day;
print_r($period);
// => 10
?>