【php】現在日時と来月1日までの正確な時間を表示する

php, WEB制作

phpで日付を操作するDateTime関数
date関数の方が感覚的に書きやすい気がしますが、2038年問題にも対応しているという事で、こっちでコードを書いてみました。

コードの目標

wordpressで作りたい機能があったので、その機能に必要だったので勉強しました。
DateTimeで作りたかった機能の一部としては

・現在日時と来月1日までの正確な時間差の取得
現在の日時を取得
来月の日付が切り替わる時間を取得

・取得した時間差を秒に変換
現在と来月1日0時0分0秒までの時間を取得
その時間を秒に変換する。

たったこれだけですが、結構つまづいたので記録しておきます。

現在日時と来月1日までの時間差の取得

こっちの方はそれほど困らずに書けました。
下記コードは説明も兼ねているので実際に使用する部分は非常に短いです。

一行目のdate_default_timezone_set( ‘Asia/Tokyo’ );でタイムゾーンの設定

$dt = new DateTime(‘now’);で現在日時を取得

$dt_2 = new DateTime(‘midnight first day of next month’);で来月1日の日付が切り替わる時間を取得しています。
ここでちょっと躓いたのですが【first day of next month】で”来月の初日時を取得”との記事を多く見ましたが、正確には”来月の初日”の取得であって、時間と分、秒は実行時のものになります。

【midnight first day of next month】とする事で日付が変わる瞬間に出来ました。

最後の行、$d = $dt_2->diff($dt, true);で現在の時間と来月の差を取得しています。

秒に変える

取得した差分の時間を秒に変えていきます。
ここで結構はまりました。

値の取り出しではまったのですが、、、
datetime関数で得られるのはオブジェクトらしく、オブジェクトの値をそのまま取り出そうとすると【Cannot use object of type DateInterval as array】といったエラーが出ます。

これを解決する為に一度get_object_varsでオブジェクトプロパティを配列にしています。

$day = $test[“d”] * 24 * 60 * 60;から下は、取得した日時分を秒に変えて変数に格納しています。

最後に$difftime= $day + $hour + $miutes + $second;で秒に変えたそれぞれの値を合算、これで差分の合計秒が出来ました。

最後にコメント文やテストコードを省いたものを載せておきます。

この記事が気に入ったら
『いいね』しよう!