こんにちはフロントエンドエンジニアのまさにょんです!
今回は、PHPの日付や時間を操作する関数として date関数とstrtotime関数の使い方について解説していきます。
目次
PHPの日付や時間を操作するdate関数とstrtotime関数
PHPの日付や時間の取得や、タイムスタンプを使った時間の比較計算などの操作は、date関数とstrtotime関数を理解すればことたりるはずです。
それぞれ基本的な使い方や特徴を説明した後に、SampleCodeを提示します。
date関数とは?
date関数は、指定したフォーマットで日付や時間を示す「日時文字列」を作成してくれる関数で、次の2つの使い方ができます。
「現在の時刻」を「指定したフォーマット」で出力する。
または「指定したタイムスタンプ(時刻の数値)」を「指定したフォーマット」で出力する。
上記の2つの使い分けは、引数の設定によって決まることになります。
date(フォーマット); date(フォーマット, タイムスタンプ);
引用元: PHPで日付関数を使いこなす(date, strtotime)
- date関数は引数を1つ(or 2つ)持てる
- 第1引数:フォーマット(string)
- 第2引数:タイムスタンプ(int)
- 引数1つの時:「現在の時刻」を「指定したフォーマット」で出力
- 引数2つの時:「第2引数のタイムスタンプ」を「指定したフォーマット」で出力
- 戻り値はstring
date関数の第1引数に渡す日付や時間のフォーマットには、次のようなものがあります。
フォーマット | 内容 | 出力結果(例) |
---|---|---|
Y | 西暦(4桁) | 2017 |
y | 西暦(2桁) | 17 |
l | うるう年: 1、平年: 0 | 0 |
m | 月(0埋め) | 08 |
n | 月(0埋め無し) | 8 |
M | 月 英語表記 | August |
F | 月 英語表記(略) | Aug |
d | 日付(0埋め) | 08 |
j | 日付(0埋め無し) | 8 |
l | 曜日 英語表記 | Monday |
D | 曜日 英語表記(略) | Mon |
w | 曜日 (日曜: 0 → 土: 6) | 1 |
H | 時刻 24時間表記 (0埋め) | 09 |
G | 時刻 24時間表記 (0埋め無し) | 9 |
h | 時刻 12時間表記 (0埋め) | 09 |
g | 時刻 12時間表記 (0埋め無し) | 9 |
i | 分 | 02 |
s | 秒 | 02 |
date関数のフォーマットは、上記の記号を組み合わせることで、任意のフォーマットで日付や時刻を取得することができます。
strtotime関数とは?
strtotime関数は、指定したフォーマットで日付や時間を示す数値である「タイムスタンプ」を作成してくれる関数で、次の2つの使い方ができます。
「現在」を基準とした、「第1引数の日時」のタイムスタンプを出力する。
または「第2引数のタイムスタンプ」を基準とした、「第1引数の日時」のタイムスタンプを出力する。
上記の2つの使い分けは、引数の設定によって決まることになります。
strtotime(日時); strtotime(日時, タイムスタンプ);
引用元: PHPで日付関数を使いこなす(date, strtotime)
- strtotime関数は引数を1つ(or 2つ)持てる
- 第1引数:日時(string)。相対日時や絶対日時を指定可能。
- 第2引数:タイムスタンプ(int)
- 引数1つの時:「現在」を基準とした、「第1引数の日時」のタイムスタンプを出力
- 引数2つの時:「第2引数のタイムスタンプ」を基準とした、「第1引数の日時」のタイムスタンプを出力
- 戻り値はint
基本的な日付・時間操作のSampleCode
ここからは、上記の2つの関数の特徴を踏まえた上で、基本的な日付・時間操作のSampleCodeのユースケースを見ていきます。
タイムゾーンを指定する
タイムゾーンは、忘れずに設定しておきましょう。
// タイムゾーンを指定する
date_default_timezone_set('Asia/Tokyo');
現在の日付・時間を取得するパターン
// タイムゾーンを指定する
date_default_timezone_set('Asia/Tokyo');
// [ 1. 現在系統の時間を取得するパターン ]
// 現在の年を取得する
$nowyear = date("Y");
echo $nowyear . "\n";
// 2022
// 現在の「年/月/日」を取得する
$date = date("Y/m/d");
echo $date . "\n";
// 2022/12/22
// 現在の「時:分:秒」を取得する
$hms = date("H:i:s");
echo $hms . "\n";
// 21:18:50
// 現在の「日時」(年月日時分秒)を取得する
$nowTime = date("Y-m-d H:i:s");
echo $nowTime . "\n";
// 2022-12-22 21:18:50
// タイムスタンプ(時刻の数値)で、現在時刻を取得する
$now_timestamp = strtotime('now');
// タイムスタンプから日時を取得する
$now_date = date("Y-m-d H:i:s", $now_timestamp);
echo '現在の日付' . "\n";
echo $now_timestamp . "\n";
echo $now_date . "\n";
// 現在の日付
// 1671711530
// 2022-12-22 21:18:50
過去の日付・時間を取得するパターン
// [ 2. 過去系統の時間を取得するパターン ]
// 指定した過去の日時のタイムスタンプを取得する
$pass_timestamp = strtotime("2018-04-01");
// 取得したタイムスタンプ(時刻の数値)を使って、過去の日付の
$pass_date = date("Y-m-d H:i:s", $pass_timestamp);
echo '過去の日付' . "\n";
echo $pass_timestamp . "\n";
echo $pass_date . "\n";
// 過去の日付
// 1522508400
// 2018-04-01 00:00:00
未来の日付・時間を取得するパターン
// [ 3. 未来系統の時間を取得するパターン ]
$future_timestamp = strtotime("2025-04-01");
$future_date = date("Y-m-d H:i:s", $future_timestamp);
echo '未来の日付' . "\n";
echo $future_timestamp . "\n";
echo $future_date . "\n";
// 未来の日付
// 1743433200
// 2025-04-01 00:00:00
現在から1日後のタイムスタンプを取得する
echo '現在から1日後のタイムスタンプを取得する' . "\n";
echo date('Y/m/d H:i:s',strtotime("+1 day")) . "\n";
// 現在から1日後のタイムスタンプを取得する
// 2022/12/23 21:18:50
現在から5日前の日付を取得する
$before_day = 5;
echo '現在から5日前の日付を取得する' . "\n";
echo date("Y-m-d H:i:s", strtotime("-$before_day day")) . "\n";
// 現在から5日前の日付を取得する
// 2022-12-17 21:18:50
現在から1週間後のタイムスタンプ
echo '現在から1週間後のタイムスタンプ' . "\n";
echo date('Y/m/d H:i:s',strtotime("+1 week")) . "\n";
// 現在から1週間後のタイムスタンプ
// 2022/12/29 21:18:50
現在から1カ月後のタイムスタンプ
echo '現在から1カ月後のタイムスタンプ' . "\n";
echo date('Y/m/d H:i:s',strtotime("+1 month")) . "\n";
// 現在から1カ月後のタイムスタンプ
// 2023/01/22 21:18:50
現在から+1秒、+2分、+3時間、+4日、+5カ月、+6年のタイムスタンプ
echo '現在から+1秒、+2分、+3時間、+4日、+5カ月、+6年のタイムスタンプ' . "\n";
echo date('Y/m/d H:i:s',strtotime("+1 seconds +2 min +3 hours +4 day +5 month +6 year")) . "\n";
// 現在から+1秒、+2分、+3時間、+4日、+5カ月、+6年のタイムスタンプ
// 2029/05/27 00:20:51
次の木曜日のタイムスタンプ
echo '次の木曜日のタイムスタンプ' . "\n";
echo date('Y/m/d H:i:s',strtotime("next Thursday")) . "\n";
// 次の木曜日のタイムスタンプ
// 2022/12/29 00:00:00
前の月曜日のタイムスタンプ
echo '前の月曜日のタイムスタンプ' . "\n";
echo date('Y/m/d H:i:s',strtotime("last Monday")) . "\n";
// 前の月曜日のタイムスタンプ
// 2022/12/19 00:00:00
日付・時間の時間の比較計算
あたりまえですが、日付・時間の比較計算のためには、タイムスタンプ(数値化)する必要があります。
$pass_timestamp = strtotime("2018-04-01");
$now_timestamp = strtotime('now');
$future_timestamp = strtotime("2025-04-01");
var_dump($pass_timestamp <= $now_timestamp);
// bool(true)
var_dump($future_timestamp <= $pass_timestamp);
// bool(false)
var_dump(($pass_timestamp <= $now_timestamp) && ($now_timestamp <= $future_timestamp));
// bool(true)
関連記事
PHPで休日(土日)を判定する方法・曜日を判定する方法
PHPで深夜の時間の判定する方法・深夜時間(真夜中)の計算
Twitterやってます!Follow Me!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!
プログラミング学習・エンジニア転職関連の情報
自宅で現役エンジニアから学べる『TechAcademy』 (エンジニア転職保証)
『GEEK JOBキャンプ』スピード転職コース(無料)
【IT道場】入校時0円! 就職目的プログラミングスクール
エンジニア転職なら100%「自社開発」求人に強い【クラウドリンク】
『techgym』 (Python特化・無料)
PHP / Laravel書籍
参考・引用
- PHPで日付関数を使いこなす(date, strtotime)
- phpで現在日時を取得する方法!
- 指定した日時のタイムスタンプを取得する
- PHP-Manual: date
- PHP-Manual: strtotime
- PHP タイムスタンプの取得と日時の取得