[PHP]月の日数を取得する方法

広告

PHPには、日付の操作にはDateTime型のDiff関数をコールすることで2つの日付の差を得ることができます。毎月の当月の日数を知る(11月なら30日、10月なら31日といった具合)方法が意外と手こずったので、一旦記事にして残しておこうと思います

PHPの日付操作の基本

PHPにおいては、日付を扱うのは、ネットで一番見るのはDate型を利用した方法です

今日の日付を”2018/11/08″という形式で取得する場合は、以下のようにコードを記載すれば、今日の日付が確認できます

この場合、Y、m、dは以下のような意味があります

コード 意味
Y 年(4桁)
m 月(2桁)
d 日(2桁)

しかし、Date型は意外にできることがすくなく日数を計算するなどの処理は、DateTime型を利用する方が良さそうです。
今日の日付を上記のように得るだけなら、以下のようなコードになります

なんか、少し面倒ですが一度、変数に入れた上でフォーマットを掛ける必要があります

DateTime型を利用した日付操作

ただ、DateTime型は、様々な日付操作を行うことができます

今日の日付を得るだけでなく、任意の日付を設定することも以下のようなコードで設定が可能です

setDateメソッドを使い数値を利用した設定です。簡単ですね(年、月、日を数字で指定します)

また、modifyメソッドを利用することで、日付の内容を任意の状況に変えることができます

例えば、今月1日や来月1日をデータとして得ることも非常に簡単な操作で行うことができます

今月の1日を取得するなら以下のようなコードです

詳しい使い方は、こちらを参照してください

日付の差分の取得

日付の差分は、同様にdiffメソッドを使います。
以下の例は、今月の最終日($lastday)と最初の日($firstday)を指定して月の最後と最初の日の差分を表示します

例えば上記の例2018年11月だと以下のように出力されます(改行は適当にいれています)

というわけで、表題の月の日付を計算するのは簡単!と思ったのですが、そうでもありませんでした

翌月初日と今月初日の差分は、日数が0になる!?

当然ながら、上記のコードがうまく行ったことを元にすれば、翌月の1日を指定すればOKと考え、まずは以下のコードを試しました

結果は以下のとおり(2018年11月に実施)

あれ!?…予測の結果は30なのですが、どうやらdは一月以内の日数が表示される様子で、例えば以下のようなコードにするとmに1が表示されます

結果は以下のとおり(2018年11月に実施)

dateintervalの内容を確認して解決

DateTime型のdiffをとったときの返り値(上記のコードでいうところの$diff)はDateInterval型で返ってきます

そこで、DateInterval型についての以下のマニュアルサイトを参照してみました

この中に以下のような記述があります

days
DateTime::diff() で作られた DateInterval オブジェクトの場合は、開始日と終了日の間の日数。 それ以外の場合は days は FALSE となります。

どうやらコレを使うべきのようです
以下のようなコードにしてみました

結果は以下です

最後の「days」が思ったとおりの値になっています

以上 PHPで月の日数を取得する方法についての記事でした

広告

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です