【PHP】日付計算の落とし穴 (その2)
IT事業部 プログラマーのTKです。
前回の「日付計算の落とし穴」の続きです。
それでは、翌月の末日を取得したい場合にはどうすれば良いか?
という話ですが、以下のようにすれば良いことが分かります。
実行環境:PHP version 5.3.3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php function GetNextMonth_Fixed($pDate){ $wkTimeStamp = strtotime('+2 month',strtotime(date("Ym01",strtotime($pDate)))); $wkTimeStamp = strtotime('-1 day',$wkTimeStamp); $wkDate = date("Y",$wkTimeStamp)."/".date("m",$wkTimeStamp)."/".date("d",$wkTimeStamp); return $wkDate; } print("2012/01/29の一か月後→".GetNextMonth_Fixed("2012/01/29")."<br>"); print("2012/01/31の一か月後→".GetNextMonth_Fixed("2012/01/31")."<br>"); print("2012/02/29の一か月後→".GetNextMonth_Fixed("2012/02/29")."<br>"); print("2012/03/31の一か月後→".GetNextMonth_Fixed("2012/03/31")."<br>"); print("2012/04/30の一か月後→".GetNextMonth_Fixed("2012/04/30")."<br>"); print("2012/05/31の一か月後→".GetNextMonth_Fixed("2012/05/31")."<br>"); print("2012/06/30の一か月後→".GetNextMonth_Fixed("2012/06/30")."<br>"); print("2012/07/31の一か月後→".GetNextMonth_Fixed("2012/07/31")."<br>"); print("2012/08/31の一か月後→".GetNextMonth_Fixed("2012/08/31")."<br>"); print("2012/09/30の一か月後→".GetNextMonth_Fixed("2012/09/30")."<br>"); print("2012/10/31の一か月後→".GetNextMonth_Fixed("2012/10/31")."<br>"); print("2012/11/30の一か月後→".GetNextMonth_Fixed("2012/11/30")."<br>"); print("2012/12/31の一か月後→".GetNextMonth_Fixed("2012/12/31")."<br>"); ?> |
一旦、当月の1日に遡る
↓
2カ月後の日付を取得する
↓
1日前の日付を取得する
という手順を踏むことで、翌月の末日を取得することができました。
出力結果:
2012/01/29の一か月後→2012/02/29
2012/01/31の一か月後→2012/02/29
2012/02/29の一か月後→2012/03/31
2012/03/31の一か月後→2012/04/30
2012/04/30の一か月後→2012/05/31
2012/05/31の一か月後→2012/06/30
2012/06/30の一か月後→2012/07/31
2012/07/31の一か月後→2012/08/31
2012/08/31の一か月後→2012/09/30
2012/09/30の一か月後→2012/10/31
2012/10/31の一か月後→2012/11/30
2012/11/30の一か月後→2012/12/31
2012/12/31の一か月後→2013/01/31
今後もPHP,その他開発言語についてのTipsがあれば、
備忘録を兼ねて投稿しようと思います。