概要
当月のデータを取得するクエリをデータベースに投げるとき、月末や翌月1日を指定したいことってありますよね?
というわけで、PHPで月末年月日&翌月1日を取得する方法のメモです。
当月月末年月日を取得
date関数を使います。
この関数には素敵パラメータ”t”というのがありまして、指定した月の日数を取得することができます。
ですから、当月の月末年月日を取得したい場合は
$eofMonth = date("Y-m-t");
で簡単に取得できます。
データベースに投げるクエリでは
$sql = "select * from sales "; $sql .= "where order_date >= '" . date("Y-m-1"). "' "; $sql .= "and order_date <= '" . date("Y-m-t 23:59:59") . "' "; [/sourcecode] てなことになると思います。 <h2>翌月1日を取得</h2> でも、月末年月日だと1秒未満(ミリ秒とかマイクロ秒単位で23:59:59.1とか)で判定されないことがあるんじゃね*1 ?という懸念から、できれば翌月1日未満で指定したいところですよね?そんなことないですか? で、翌月1日を取得する方法ですが、 // 月末に1日を加算すればいいんだから… $nextMonthFirstDay = date("Y-m-d", strtotime(date("Y-m-t")) + (60 * 60 * 24)); // もしくは $nextMonthFirstDay = date("Y-m-d", mktime(0,0,0,date("m"),date("t") + 1,date("Y")));
とするわけですよ。(もっと簡単な方法があるかも)
データベースに投げるクエリでは
$sql = “select * from sales “;
$sql .= “where order_date >= ‘” .date(“Y-m-1”) . “‘ “;
$sql .= “and order_date < '". date("Y-m-d", strtotime(date("Y-m-t")) + (60 * 60 * 24)) . "' ";
[/sourcecode]
これなら心配性のあなたでも枕を高くして寝られますね(謎)
- 未検証な上にまずねーだろって感じですが [↩]
コメント
翌月1日を取得するのはstrtotime()を使用したほうが楽かもしれません。
date(‘y-m-1’,strtotime(‘+1 month’));
strtotime()は柔軟なのでmonthやday、year、さらにweekなども認識します。
daira様、素晴らしい方法を教えてくださってありがとうございます!
strtotimeってとても素敵な関数なんですね!
今まではデータベースのdatetime型をタイムスタンプに書き換えるくらいにしか使ってませんでした。もったいない。。
dairaさんに教えていただいた方法ならものすごくスッキリしますね。
dairaさんのご親切に、心から感謝です!