最近、なめらかプリン作りにハマっているライカです。
PHPで日付を出したいけど、DateTimeクラスってなんだろうと思っている方も多いはず。
今回はPHP初心者に向けて、
DateTimeクラスの使い方
について解説していきたいと思います
PHP初心者がつまづきやすいポイントを分かりやすく解説します。
DateTimeクラスがいまいちよく分からない方は、ぜひ最後まで読んで理解を深めてくださいね。
DateTimeクラスとは
PHPには日付を取得するためにdate関数がよく使われますが、それ以外にもDateTimeクラスがあります。
date関数もDateTimeクラスも日時を操作することができますが、DateTimeクラスはオブジェクト指向に基づいて定義されています。
date関数では
1 |
echo date(“Y-m-d”); |
という表記になりますが、DateTimeクラスでは以下の様になります。
1 2 3 |
$date = new DateTime(); echo $date->format(‘Y-m-d’); |
DateTimeクラスからDateTimeオブジェクトを作成し、取得した現在日時をformatで指定したフォーマットにあてはめます。
フォーマットを変えることにより色んな表現の仕方ができます。
指定した日時の取得
また、任意の日時を表示させるためにはこのように表記します。
1 2 3 |
$date = new DateTime(‘2020-08-08 15:00:25’); echo $date->format(‘Y-m-d H:i:s’); |
DateTimeの後ろに任意の日時が入っているため実行結果は
1 |
2020-08-08 15:00:25 |
となります。
インスタンス作成時には、日時を英文形式で指定して渡すことができます。
しかし、別の形式で書かれた日時を取得したい場合もあります。
例えば
2020年08月08日 15時00分25秒
を取得したい場合は、
1 2 3 4 5 |
$for = ‘Y年m月d日 H時i分s秒’; $date = DateTime::createFromFormat($for, ‘2020年08月08日 15時00分25秒’); echo $date->format(‘Y-m-d H:i:s’); |
と表記することにより【2020/08/08/ 15:00:25】と表示することができます。
タイムゾーンを取得する
タイムゾーンを取得するには、「getTimezone()」メソッドを使用します。
1 2 3 |
$date = new DateTime(); // インスタンスを作成 $timezone = $date->getTimezone(); // タイムゾーンを取得 echo $timezone->getName(); // タイムゾーンを出力 |
また、「setTimezone()」メソッドを使ってタイムゾーンを設定することもできます。
1 |
$date->setTimezone(new DateTimeZone('Europe/London')); |
日時の計算をする
日時の計算をするには、「modify()」メソッドを使用します。
1 2 3 4 5 6 |
$date = new DateTime(); $date->modify('+3 hours'); // 3時間後 $date->modify('+1 weeks'); // 1週間後 $date->modify('+2 months + 5 days'); // 2ヶ月と5日後 $date->modify('noon'); // 正午に |
サポートされている日時の形式については、https://www.php.net/manual/ja/datetime.formats.php で確認してください。
日時の差を計算する
2つの日時の差を計算したい場合は、「diff()」メソッドを使用します。
1 2 3 4 5 6 |
$origin = new DateTime('2009-10-11'); $target = new DateTime('2009-10-13'); $interval = $origin->diff($target); echo $interval->format('%R%a days'); // +3 days // %R: + または - を返す、 %a: 差の日数を返す echo $interval->format('%R %d日'); +3日 |
まとめ
今回はDateTimeクラスの使い方について
- ・日時の取得方法
- ・日時の計算
- ・日時の差の計算
を解説しました。
PHPにおいて日時の取得や操作は必要不可欠なものですので、しっかりと理解できるようにしておきましょう。