PHPで日付と時刻(年月日時分秒)を扱う ~サンプルソースコード
PHPで日時(年月日時分秒、タイムゾーン)を扱う方法をサンプルソースコードで解説
Unixタイムスタンプについて
「1970年1月1日 00:00:00 GMT」からの通算秒のことです。
例えば「1970年1月1日 00:00:01 GMT」は「1」ですし、「1970年1月1日 01:00:00 GMT」は「3600」です。
例えば以下を実行すると、現在のUnixタイムスタンプを表示し、タイムゾーンを日本に設定して現在の日時を表示します。
php > echo time(); 1702539116 php > date_default_timezone_set('Asia/Tokyo'); php > echo date("Y/m/d H:i:s T",time()); 2023/12/14 16:31:56 JST
date()関数
date("出力フォーマットの文字列", Unixタイムスタンプ):フォーマットされた文字列を返す
php > echo date("Y/m/d H:i:s",1700000000); 2023/11/15 07:13:20
フォーマット文字列(出力される日付文字列の書式)
単位 | フォーマット文字 | 説明 | 例 |
---|---|---|---|
年 | Y | 4桁の数値で表した年 | 2022 |
年 | y | 2桁の数値で表した年 | 22 |
月 | F | 月を表す文字列 | JanuaryからDecember |
月 | M | 月を表す文字列 | JanからDec |
月 | m | 月を表す数値で先頭のゼロを含む | 01から12 |
月 | n | 月を表す数値で先頭のゼロを含まない | 1から12 |
日 | d | 2桁の日付で先頭のゼロを含む | 01から31 |
日 | j | 2桁の日付で先頭のゼロを含まない | 1から31 |
日 | z | 年始からの通算日数 | 0から365(1月1日が0) |
曜日 | D | MonからSun | |
曜日 | l | SundayからSaturday | |
午前午後 | a | am か pm | |
午前午後 | A | AM か PM | |
時 | g | 12時間制での時間で先頭のゼロを含まない | 1から12 |
時 | h | 12時間制での時間で先頭のゼロを含む | 01から12 |
時 | G | 24時間制での時間で先頭のゼロを含まない | 1から23 |
時 | H | 24時間制での時間で先頭のゼロを含む | 01から23 |
分 | i | 先頭のゼロを含む | 00から59 |
秒 | s | 先頭のゼロを含む | 00から59 |
マイクロ秒 | u | 最大6桁 | 0から999999 |
タイムゾーン | e | 設定したタイムゾーン識別子 | UTC、GMT、PST、Atlantic/Azores、Asia/Tokyo、-08:00など |
タイムゾーン | O | UTCからの時差(符号と時分) | +0200 |
タイムゾーン | P | UTCからの時差(符号と時:分) | +02:00 |
タイムゾーン | T | タイムゾーン短縮形 | UTC、GMT、PST、EST、MDTなど |
タイムゾーン短縮形の例
- GMT
- グリニッジ標準時
- UTC
- 協定世界時
- JST
- 日本標準時 GMT +09:00
- PST
- 太平洋標準時 GMT -08:00
DateTimeクラス
DateTimeクラスを使っても日時を操作することができます。
タイムゾーンを変更して日時を表示させてみます。
php > //太平洋標準時の日時の文字列を設定します。以下2つは同じ日時です。 php > $d=new DateTime("02 Dec 2018 1:03:04 -0800"); php > $d=new DateTime("02 Dec 2018 1:03:04 PST"); php > //Unixタイムスタンプを表示します。 php > echo $d->getTimeStamp(); 1543741384 php > //日時とタイムゾーンを表示します。 php > echo $d->format("Y-m-d H:i:s T P"); 2018-12-02 01:03:04 PST -08:00 php > //タイムゾーンを「日本標準時」に変更して日時とタイムゾーンを表示します。 php > $d->setTimeZone(new DateTimeZone('JST')); php > echo $d->format("Y-m-d H:i:s T P"); 2018-12-02 18:03:04 JST +09:00
タイムゾーンをJST(日本標準時)に設定し、
2020年12月1日 22時15分30秒に設定して、日時とタイムゾーンを表示します。
php > $d=new DateTime(); php > $d->setTimeZone(new DateTimeZone('JST')); php > $d->setDate(2020, 12, 1); php > $d->setTime(22, 15, 30, 0); php > //Unixタイムスタンプを表示します。 php > echo $d->getTimeStamp(); 1606828530 php > //日時とタイムゾーンを表示します。 php > echo $d->format("Y-m-d H:i:s T P"); 2020-12-01 22:15:30 JST +09:00