SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
てるてる動画

【php】日付計算(ある日から何日前、何時間後、何週間前 etc.)

ある日からの相対日付を求める計算例phpスクリプト

<?php
//ある時間からの相対日付
$x = array();
$x[] = "2009-02-13の1日前 " . date("Y-m-d H:i:s", strtotime("2009-02-13 -1 day"));
$x[] = "2009-02-13 12:34:56の1ヶ月前 " . date("Y-m-d H:i:s", strtotime("2009-02-13 12:34:56 -1 month"));
$x[] = "2009-03-03 の1週間後 " . date("Y-m-d H:i:s", strtotime("2009-03-03 +1 week"));
//新年明けましておめでとう
$x[] = "2010-12-31 23:59:59の1秒後 " . date("Y-m-d H:i:s", strtotime("2010-12-31 23:59:59 +1 sec"));
//2010-06-31ではなく、2010-07-01になります
$x[] = "【要注意】2010-07-31の1ヶ月前 " . date("Y-m-d H:i:s", strtotime("2010-07-31 -1 month"));
//2009-02-29ではなく、2009-03-01になります
$x[] = "【要注意】2008-02-29の1年後 " . date("Y-m-d H:i:s", strtotime("2008-02-29 +1 year"));

//結果
var_export($x);

結果

array (
  0 => '2009-02-13の1日前 2009-02-12 00:00:00',
  1 => '2009-02-13 12:34:56の1ヶ月前 2009-01-13 12:34:56',
  2 => '2009-03-03 の1週間後 2009-03-10 00:00:00',
  3 => '2010-12-31 23:59:59の1秒後 2011-01-01 00:00:00',
  4 => '【要注意】2010-07-31の1ヶ月前 2010-07-01 00:00:00',
  5 => '【要注意】2008-02-29の1年後 2009-03-01 00:00:00',
)

補足

・「3月31日の1ヶ月前」「1年前」などの定義などは場合によりけりだと思います。
業務で定義されている日付の計算方法があれば、ちゃんと定義に従って実装した方がよいと思います。

・GNU Date Input Formats形式については、このあたりに書いてあります。
http://www.gnu.org/software/tar/manual/html_chapter/Date-input-formats.html

関連するメモ

コメント