目次
現在時刻を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_hour | 0 時以降の時間数 (0-23) |
tm_mday | 月内の日数 (1-31) |
tm_mon | 1 月から数えた月数 (0-11) |
tm_year | 1900 年以降の年 |
tm_wday | 日曜日からの日数 (0-6) |
tm_yday | 1 月 1 日からの日数 (0-365) |
unparsed | date の中で、指定された 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