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
