PHPでの日付操作 
2008/3/27 木曜日 12:59:46
はいどうもこんにちは
のびーにょです
今日はスクリプト的な話
日付の操作でもしみてみますか
今日の日付を出したい時は
date("Y-m-d");
ですよね
じゃ、昨日の日付は?
mktime()とか使っちゃう人は尊敬します。
僕はアホな子なんでstrtotimeでやっちゃうタイプです
date("Y-m-d",strtotime("-1 day"));
で、さっきこの記事書こうと調べてたら月末の最終日取得がこんな簡単に・・・
date("Y-m-t");
こんなパラメータあったんだぁ・・・って感じですね そうですね
知らない僕がアホですね
で、これで先月の最終日も簡単に取れる!
とか思うわけじゃないですか
そこではまるのが罠なんですけどね
date("Y-m-t",strtotime("-1 month"));
これ 適当な日付で実行したら普通に動くと思うんですけどね
特定の月と日付だとまともな値が帰ってこないので注意ですよ
たとえば3月31日に実行して、本来は2月28日,29日が取得したい場合
結果としては3月31日が帰ってきます
簡単に説明すると
実行したのが2008年3月31日だった場合
strtotime("-1 month") ⇒ これは2008年2月31日を意味する
はい、すなわち2008年3月2日を表してますね。
で
date("Y-m-t")
2008年3月の最終日取得と
PHP君は間違っていませんでした ってな感じになるので注意ですよ
あ よくこういうことやります
DBに日付が格納されている時とかあるじゃないですか
あれを元に日付操作とかよくやりません?
あれも結構strtotime関数使って色々やります
// 2008-03-15 とかが格納されているとする
$getDate = $DB->getDate();
date("Y-m-t", strtotime("-1 month",
strtotime(date("Y-m-01", strtotime($getDate)))));
って感じで5回も関数使っちゃってますね 良くないですかね? 宜しくはないですよねぇ・・・
まぁ普段は月の最終日とか取る処理そんなにないので
普通に1か月前とかを取得する場合だと
//2008-03-15 とかが格納されているとする
$getDate = $DB->getDate();
date("Y-m-d",strtotime("-1 month",strtotime($getDate)));
って感じで3回とかですね
まぁmktime関数でやればいいんですけどね・・・ 分割して並べ替えて・・・ってのがどうもめんどくさく感じるわけです