Posted at

PHPとJavaScriptでその月の最後の日を取得する

かなり久々のQiitaの投稿です。

しばらくは以前に技術ブログに書いた内容を(修正が必要な箇所は修正して)Qiitaに少しづつ投稿していこうと思います。

後は最近Pythonでの機械学習も少しづつ勉強しているので、そちらの方もどこかで投稿できればと思います。

今回はこの記事のQiitaへの移転です。

2月ももうすぐ中旬になろうとしていますね。今年は2月は28日までですが、うるう年だと29日までなんですよね。

月によって30日で終わったり31日で終わったり、2月だと年によって28日だったり29日だったり日付ってたまに扱いに困るとこがありますよね。 プロ野球選手でも、当日が11月31日と勘違いして契約更改すっぽかして大変な事になった選手もいるそうです。

というわけで、PHPとJavaScriptである月の最終日を取得する方法について書こうと思います。

まずはPHPでのやり方です。 PHPだとこんな感じで簡単に取得できます。

echo date('Y-m-d', strtotime('last day of 2019-2'));

こうすると、2019-02-28と返ってきます。 他にも、こんなやり方もあります。

echo date('Y-m-t', strtotime('2019-2-10'));

こちらも同様に2019-02-28と返ってきます。ちなみに、date('Y-m-t', strtotime('2019-2-29'))だとstrtotimeの中は2019年2月の最後の日である28日の次の日、すなわち3月1日と解釈されて2019-03-31が返ってきます。逆に、date('Y-m-t', strtotime('2019-2-0'))にするとstrtotimeの中は2019年2月の最初の日の1日の前の日(1月31日)と解釈されて、2019-01-31が返ってきます。

次はJavaScriptです。こちらは直感的には少ししっくり来ないところもあるかもしれないけど、慣れれば大丈夫です。 例えば、ある日が2019年2月10日として、その日と同じ月の最終日は何日かを調べる場合はこんなやり方になります。

var current_day = new Date('2019-02-10');

var last_day = new Date(current_day.getFullYear(), current_day.getMonth() + 1, 0);

こうすると、last_dayの中には2019年2月28日に相当するDateクラスの値が入り、console.log(last_day);の結果は

Thu Feb 28 2019 00:00:00 GMT+0900 (JST)

となります。

日付を扱うテクニックは言語を問わず重要なので、きっちり押さえておきたいところです。これで契約更改をすっぽかさずに済みますね。 PHPでの日付はCarbonを使うともっと楽になるんですが、Carbonについては別の機会に紹介しようと思います。