PHP

【PHP】日付を取得、表示する

こんにちは、らいか(@hideiwa1)です。

今回は、PHPで日付や時間を取得する方法を解説します。

日付の形式

日付の形式には、「英文形式」と「Unixタイムスタンプ」の2種類があります。

英文形式
“2022-01-01” のような、文字列型での表記

Unixタイムスタンプ
”協定世界時(UTC)での1970年1月1日午前0時0分0秒からの形式的な経過秒数”
“1640962800” のような、整数型での表記

date()関数で日付を扱う

現在の日付を取得する

まずは、date()関数を使った、日付の取り扱いを見ていきましょう。

date(‘フォーマット’ [, Unixタイムスタンプ])
[]は省略可能

第2引数のタイムスタンプを省略した場合、現在日時を取得します。
フォーマットに関しては、下記の文字が使用できます。

Y4桁の数字2022
y2桁の数字22
L閏年かどうか(閏年なら1、それ以外は0)1 or 0
Fフルスペルの英語January
M3文字の英語Jan
m0を付けた数字01
n0を付けない数字1
l(小文字の’L’)フルスペルの英語(曜日)Monday
D3文字の英語(曜日)Mon
d0を付けた数字01
j0を付けない数字1
H24時間単位、0を付ける00
G24時間単位、0を付けない23
h12時間単位、0を付ける01
g12時間単位、0を付けない12
i0を付けた数字00
s0を付けた数字00

  date('Y/m/d H:i:s');  // 2022/05/08 22:24:02
  date('y年n月j日');  //22年5月8日
  date('F Y h:i:s');  //May 2022 10:24:02

任意の日付をフォーマットする

先ほどは現在の日付を扱いましたが、今度は任意の日付を扱ってみましょう。
例えば、DBから取得した日付をフォーマットしたい場合などです。

この場合、日付は基本的に英文形式で設定されていると思うので、こちらをUnixタイムスタンプへ変換する必要があります。
Unixタイムスタンプへの変換は、strtotime() 関数を使用します。

strtotime(‘日付’); // 英文形式からUnixタイムスタンプへ変換

そして、先ほど使用したdate() 関数を使用してフォーマットを行います。
date() 関数で日付を指定するには、第2引数にUnixタイムスタンプを指定します。


  $data = '2019-02-27';

  date('Y年n月j日' , strtotime($data) );  // 2019年2月27日

date() 関数の注意点

date() 関数で日付を取得、表示する方法を解説してきましたが、date() 関数には1つ問題があります。
それが、「2038年問題」です。

date() 関数がUnixタイムスタンプを使用している関係で、扱える数字に桁数の制限があります。
そのため、2038年以降の日付はエラーとなって取り扱うことが出来ません。

この問題を回避するためには、後述のDateTimeクラスを使用する必要があります。

DateTimeクラスで日付を扱う

現在の日付を取得する

次は、DateTimeクラスを使用した日付の扱いを見てみましょう。

DateTimeクラスを使用してDateTimeオブジェクトを作成し、そのオブジェクトを元にフォーマットなどを行っていきます。

詳しくはオブジェクト指向の概念を理解する必要がありますが、日付の扱いだけであれば、それほど難しくはないと思います。

$date = new DateTime(‘日付’);
日付からDateTimeオブジェクトを作成、省略した場合は現在日時で作成

$date -> format(‘フォーマット’); // 日時をフォーマットに変換

まずは new DateTime() で新しいDateTimeオブジェクトを作成します。
この際に日付を指定しなければ、現在の日付でオブジェクトが作成されます。

次に、->format() で表示形式を指定します。
フォーマットに関しては、date() 関数と同じ文字が使用できます。


  $date = new DateTime();

  $date->format('Y/m/d H:i:s');  // 2022/05/08 22:24:02
  $date->format('y年n月j日');  //22年5月8日
  $date->format('F Y h:i:s');  //May 2022 10:24:02

任意の日付をフォーマットする

次に、任意の日付を扱う場合です。

DateTimeオブジェクトを作成する際に、日付を引数に指定します。
date() 関数のように、Unixタイムスタンプではなく、英文形式の日付で指定します。


  $date = new DateTime('2019-02-27');

  $date->format('Y年n月j日');  // 2019年2月27日

まとめ

$date = date(‘フォーマット’); // 現在の日付
$date = date(‘フォーマット’, strtotime(‘日付’)); // 指定の日付

$date = new DateTime(); // 現在の日付
$date = new DateTime(‘日付’); // 指定の日付
$date -> format(‘フォーマット’); //フォーマット