PHPの日付や時間を操作する方法・日付関数の使い方(date, strtotimeとは?)

PHP-date

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、PHPの日付や時間を操作する関数として date関数とstrtotime関数の使い方について解説していきます。

目次

PHPの日付や時間を操作するdate関数とstrtotime関数

PHPの日付や時間の取得や、タイムスタンプを使った時間の比較計算などの操作は、date関数とstrtotime関数を理解すればことたりるはずです。

それぞれ基本的な使い方や特徴を説明した後に、SampleCodeを提示します。

date関数とは?

date関数は、指定したフォーマットで日付や時間を示す「日時文字列」を作成してくれる関数で、次の2つの使い方ができます。

「現在の時刻」を「指定したフォーマット」で出力する。

または「指定したタイムスタンプ(時刻の数値)」を「指定したフォーマット」で出力する。

上記の2つの使い分けは、引数の設定によって決まることになります。

date(フォーマット);

date(フォーマット, タイムスタンプ);
  • date関数は引数を1つ(or 2つ)持てる
    • 第1引数:フォーマット(string)
    • 第2引数:タイムスタンプ(int)
  • 引数1つの時:「現在の時刻」を「指定したフォーマット」で出力
  • 引数2つの時:「第2引数のタイムスタンプ」を「指定したフォーマット」で出力
  • 戻り値はstring
引用元: PHPで日付関数を使いこなす(date, strtotime)

date関数の第1引数に渡す日付や時間のフォーマットには、次のようなものがあります。

フォーマット内容出力結果(例)
Y西暦(4桁)2017
y西暦(2桁)17
lうるう年: 1、平年: 00
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
i02
s02
【 引用元: phpで現在日時を取得する方法!

date関数のフォーマットは、上記の記号を組み合わせることで、任意のフォーマットで日付や時刻を取得することができます。

strtotime関数とは?

strtotime関数は、指定したフォーマットで日付や時間を示す数値である「タイムスタンプ」を作成してくれる関数で、次の2つの使い方ができます。

「現在」を基準とした、「第1引数の日時」のタイムスタンプを出力する。

または「第2引数のタイムスタンプ」を基準とした、「第1引数の日時」のタイムスタンプを出力する。

上記の2つの使い分けは、引数の設定によって決まることになります。

strtotime(日時);
strtotime(日時, タイムスタンプ);
  • strtotime関数は引数を1つ(or 2つ)持てる
    • 第1引数:日時(string)。相対日時や絶対日時を指定可能。
    • 第2引数:タイムスタンプ(int)
  • 引数1つの時:「現在」を基準とした、「第1引数の日時」のタイムスタンプを出力
  • 引数2つの時:「第2引数のタイムスタンプ」を基準とした、「第1引数の日時」のタイムスタンプを出力
  • 戻り値はint
引用元: PHPで日付関数を使いこなす(date, strtotime)

基本的な日付・時間操作の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書籍

参考・引用

  1. PHPで日付関数を使いこなす(date, strtotime)
  2. phpで現在日時を取得する方法!
  3. 指定した日時のタイムスタンプを取得する
  4. PHP-Manual: date
  5. PHP-Manual: strtotime
  6. PHP タイムスタンプの取得と日時の取得

最近の投稿