tech.chakapoko.com
Home / PHP / 日時

[PHP]組み込み関数を使って日時を扱う。現在時刻の取得、文字列への変換、文字列からの変換など。

現在時刻をUnixタイムスタンプの形で取得する

PHPで現在時刻をUnixタイムスタンプの形で取得するには time 関数を使います。Unixタイムスタンプとは1970年1月1日 00:00:00 GMTからの秒数です。

<?php
echo time(); // 1560307049

指定した時刻をUnixタイムスタンプの形で取得する

指定した時刻をUnixタイムスタンプの形で取得するには mktime 関数を使います。

mktime 関数の引数の順序は「時、分、杪、月、日、年」です。

次のコードは2019年6月12日11時45分36秒のUnixタイムスタンプを取得する例です。

<?php
echo mktime(11, 45, 36, 6, 12, 2019); // => 1560339936

現在時刻を文字列として取得する

PHPで現在時刻を文字列として取得するには date 関数を使います。

<?php
echo date('Y-m-d H:i:s'); // => 2019-06-12 11:45:36

date 関数の引数には文字列のフォーマットを指定します。

Unixタイムスタンプを文字列に変換する

date 関数を使う方法

date 関数の第2引数にはUnixタイムスタンプを指定することができます。Unixタイムスタンプを指定すると date 関数は指定した時刻を文字列として返します。

<?php
echo date('Y-m-d H:i:s', mktime(11, 45, 36, 6, 12, 2019)); // => 2019-06-12 11:45:36

strftime 関数を使う方法

strftime 関数を使ってもUnixタイムスタンプを文字列に変換できます。

date関数とは違うフォーマット文字を使います。

<?php
echo strftime('%Y-%m-%d %H:%M:%S', mktime(11, 45, 36, 6, 12, 2019)); // => 2019-06-12 11:45:36

文字列をUnixタイムスタンプに変換する

文字列をUnixタイムスタンプに変換するには strtotime 関数を使います。

strtotime 関数はとても柔軟で、多様な形式に対応しています。

<?php
echo strtotime('2019-06-12 11:45:36'); // => 1560339936
echo strtotime('Wed Jun 12 11:45:36 2019'); // => 1560339936

strptime 関数を使って日時文字列を日時情報の配列に変換する

strptime 関数を使うとフォーマット文字列を指定して日時文字列をパースできます。

指定できるフォーマット文字列は strftime 関数と同じです。

<?php
var_dump(strptime('2019-06-12 11:45:36', '%Y-%m-%d %H:%M:%S'));

このコードを実行すると以下の出力が得られます。

array(9) {
  ["tm_sec"]=>
  int(36)
  ["tm_min"]=>
  int(45)
  ["tm_hour"]=>
  int(11)
  ["tm_mday"]=>
  int(12)
  ["tm_mon"]=>
  int(5)
  ["tm_year"]=>
  int(119)
  ["tm_wday"]=>
  int(3)
  ["tm_yday"]=>
  int(162)
  ["unparsed"]=>
  string(0) ""
}

各配列要素の意味は次の通りです。

パラメータ説明
tm_sec分未満の秒数 (0-61)
tm_min時間未満の分数 (0-59)
tm_hour0 時以降の時間数 (0-23)
tm_mday月内の日数 (1-31)
tm_mon1 月から数えた月数 (0-11)
tm_year1900 年以降の年
tm_wday日曜日からの日数 (0-6)
tm_yday1 月 1 日からの日数 (0-365)
unparseddate の中で、指定された format で判断できなかった部分

時刻の計算を行う

例えば現在時刻から1日後のUnixタイムスタンプを返すには、

strtotime('+1 day');

と書けます。

また、strtotime 関数の第2引数にはUnixタイムスタンプが渡せます。これを利用して時刻の計算ができます。

<?php
$tomorrow = strtotime('+1 day', mktime(11, 45, 36, 6, 12, 2019));
$last_year = strtotime('-1 year', mktime(11, 45, 36, 6, 12, 2019));
echo date('Y-m-d H:i:s', $tomorrow);  // => 2019-06-13 11:45:36
echo date('Y-m-d H:i:s', $last_year); // => 2018-06-12 11:45:36