この間DateTimeの基本的なことを書いてみました。
今回はちょっと、それを実践的に書いてみたら
どーなるかなーと思って書いてみました。
INDEX
今日から3ヵ月後の-1日
パラメータにこうやって入れる事もできます。
このパラメタの値はマニュアルに書いてあります。
色々やれそうな感じですねぇ。
//3ヵ月後-1日 $afterobj = new DateTime("+3month -1day"); echo $afterobj->format("Y-m-d");
今日から3ヵ月後の最終日
結構業務プログラムとかでこういうのやる時があります。
なので僕にとってこういうの重宝します。
//3ヵ月後の最終日 $aftermonth = new DateTime("last day of +3month"); echo $aftermonth->format("Y-m-d"); $afterobjperiod = new DateTime(); echo $afterobjperiod->format("Y-m-d");
2014年8月31日から三ヵ月後の日付
指定日付でも、+3monthとかできちゃいます。
//8/31日から三ヵ月後の日付 $new = new DateTime(); $new->setDate(2014,8,31); echo $new->modify("+3 month")->format("Y-m-d");
今日から三ヵ月後の第三水曜日
以前聞かれたプログラム。
44行くらい1年前にコード書いたけど
今はたったこれだけで済みます。
というか、自分じゃない人が書いたら
もっと短くなるんぢゃないでしょうか。
//3ヶ月後の第三水曜日取得 $start = new DateTime("first day of +3month"); $interval = new DateInterval('P1D'); $afterSeven = new DateTime("+3month +7days"); $period = new DatePeriod($start,$interval,$afterSeven); foreach($period as $obj) { if($obj->format("D") == "Wed") { $date = $obj->format("Y-m-d"); break; } } $week3after = new DateTime($date); echo $week3after->modify("+3week")->format("Y-m-d D");
コッチ試してないけど、これでも同じ意味になりそうですね。
$week = new DateTime(); for($i=0; $i<7; $i++) { if($week->setDate(2014,10,$i)->format("D") == "Wed") { break; } } echo $week->modify("+3week")->format("Y-m-d D").PHP_EOL;