【PHP】月初・月末を取得する

はじめに

テストコードを書いている時に、引数として月初、月末を指定してたくてちょっと調べてみました。

結論

strtotime関数を使うやり方が見た目的にわかりやすくていい感じです。

// 今月初日
$first_date = date("Y-m-d", strtotime("first day of this month"));
 
// 今月末日
$last_date = date("Y-m-d", strtotime("last day of this month"));

ちなみに、予約を取る系のサイトのテストではシステム日付から何日分かのテストデータを作っておいて、
未来日付に対してクエリ指定するテストなんかよくあると思いますが、
その際にもstrtotimeを使っています。

        $fromDate = date("Y-m-d", strtotime("+3 day")); // 3日後
        $toDate = date("Y-m-d", strtotime("+4 day")); // 4日後

詳しくは、下記ページにやり方が書いています。
はじめてのPHP!月初・月末を取得する方法を解説 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト

掘り下げて

上記でやりたいことは解決したんですが、
そもそもこれどこに書いてあるのか?と気になりPHPのドキュメントを調べてみました。

strtotime

strtotime — 英文形式の日付を Unix タイムスタンプに変換する

説明 ¶

strtotime ( string $time [, int $now = time() ] ) : int

パラメータ ¶
time
 日付/時刻 文字列。有効な書式については 日付と時刻の書式 で説明しています。

とあるので、「日付と時刻の書式」のページを見る。

日付と時刻の書式

このページは目次だけらしい。4つのリンクがあります。

  • 時刻の書式
  • 日付の書式
  • 複合的な書式
  • 相対的な書式

一通り見た感じ、「相対的な書式」がそれらしきことが書かれています。

相対的な書式

そのものずばりで書いているのはコメント欄のみでした。

'first day of'

現在月の最初の日にします。 この書式に続けて月名を指定する使いかたが最適です。 "first day of January 2008"

'last day of'

現在月の最後の日にします。 この書式に続いて月名を指定する使いかたが最適です。 "last day of next month"

ordinal space unit

値を英単語で指定するような、相対的な時間指定を処理します。 "fifth day", "second month"

この辺の組み合わせ、なのかな。

「ordinal space unit」のordinalやunitはページ上部にある「シンボル一覧」に相当する書式に該当します。

ordinal

'first' | 'second' | 'third' | 'fourth' | 'fifth' | 'sixth' | 'seventh' | 'eighth' | 'ninth' | 'tenth' | 'eleventh' | 'twelfth' | 'next' | 'last' | 'previous' | 'this'

unit

(('sec' | 'second' | 'min' | 'minute' | 'hour' | 'day' | 'fortnight' | 'forthnight' | 'month' | 'year') 's'?) | 'weeks' | daytext

このページには他にも色々な指定の仕方があるので、見てみると面白いです。