[PHP]指定した年月の末日を取得する

Read More

指定した年月の末日を取得する方法を検索するとmktime()を使う方法がたくさんヒットする。
だけど実はstrtotime()を使っても同じことができる。


以下、年月の末日を取得するためのその2通りの方法を記しておく。

前提条件:
$dateにはYYYY/MM/DD形式の日付が入っているものとする。
この変数を利用し月の末日を取得するものとする。


■mktime()を使った末日の取得
<?php
$aryDate = explode('/', $date);
$timestamp = mktime(0, 0, 0, $aryDate[1]+1, 0, $aryDate[0]);
print date('d', $timestamp);
?>



■strtotime()を使った末日の取得
<?php
$timestamp = strtotime('last day of '. $date);
print date('d', $timestamp);
?>

繰り返しになるが上記のものはどちらも同じ結果を返す。


上記2通りの方法を示したが、これはどちらの方が良いというものではない。

今回は$dateにYYYY/MM/DD形式で値が入っているというのを前提条件にしてあるが、
これはDBに格納した日付形式のデータを利用することを想定している。

つまりDBの日付用カラムにはtimestamp型とかdatetime型などで格納してあるということ。
このような場合は後者であるstrtotime()の方が手っ取り早い。

しかし1カラム毎に、年、月、日と分けて格納しているのであればmktime()を使った方が簡単だろう。
日付計算などが絡んでくるのであればやっぱりmktime()の方が使いやすい。


まあstrtotime()も色々できるのね、と知っておくだけでいい。


--
上記の例でははしょったが、どちらの方法をとるにしても$dateに正しい値が入っているかの事前チェックは必要。
空の値が入っていたりするとワーニングが出たりdate()がうまく値を返さなかったりするからだ。


strtotime()は他にも色んな指定方法ができるが、PHPのVerによってバグがあったりするようなのでそこは気をつけなければならない。

詳しくは公式マニュアルをみるべし。