[php]日付関数(date / mktime / strtotime / time)

php

以前の記事で日付を扱うcarbonライブラリを紹介しましたが、今回は標準の関数を使って日付を使う方法を記載しています。
(最近ライブラリを使わずに日付を扱うことがあったので書いてみました。)

PHP5.2以降はDateTime型が使えるようですが、
それより前は使えないので、ライブラリを使わない場合は下記の関数を使って処理する必要があるようです。

date – 日付に関する文字列作成

概要

date ( string $format [, int $timestamp = time() ] ) : string

第1引数で渡した書式をもとに日付文字列を作成して返してくれます。

第2引数にはタイムスタンプを渡すことができ(渡さなくても良い)タイムスタンプを渡すと、その時間で日付文字列を作成してくれます。
タイムスタンプを渡さなかったときには現在日付で日付文字列を作成してくれます。

年月日などの日付文字列を返す以外にも曜日数値を返したり、閏年かどうかを返したりもします。

・公式のドキュメントはこちら

書式

よく使いそうな書式だけ、公式からまとめてみました。

書式値内容返り値
Y年を表す。4桁。2020など
m月を表す。2桁(1桁の場合は先頭0埋め)01 – 12
d日を表す。2桁(1桁の場合は先頭0埋め)01 – 31
H時を表す。2桁(1桁の場合は先頭0埋め)00 – 23
i分を表す。2桁(1桁の場合は先頭0埋め)00 – 59
s秒を表す。2桁(1桁の場合は先頭0埋め)00 – 59
y年を表す。2桁20など
j日を表す。0埋めなし1 – 31
n月を表す。0埋めなし1 – 12
w曜日を表す数値。0 (日曜) – 6 (土曜)

サンプルコード

年月日を取得する(年4桁・月日2桁0埋め)

echo date("Y年m月d日"); // 2020年05月30日

年月日を取得する(年2桁・月日の0埋めなし)

echo date("y年n月j日"); // 20年5月30日

時分秒を取得する

echo date("H:i:s"); // 23:13:06

曜日の日本語を取得する

$day_weeks = ["日", "月", "火", "水", "木", "金", "土"];
echo $day_weeks[date("w")]; // 土

mktime – 指定日でタイムスタンプ作成

概要

mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $ye

渡した引数を元にUNIXタイムスタンプを返してくれます。
UNIXタイムスタンプは1970年1月1日(午前0時0分0秒)からの経過時間になります。

・公式のドキュメントはこちら

サンプルコード

指定日のタイムスタンプ取得(2020-05-01)

mktimeに取得したい日の引数を渡すと、その時間のタイムスタンプが取得できます。
下記は2020/05/01の0時0分のタイムスタンプを取得して、date関数で日付に直して表示しています。

mktimeは引数が時、分、秒、月、日、年となっていて、年月日ではないので注意が必要です。

$targetDate = mktime(0, 0, 0, 5, 1, 2020);
echo $targetDate."n"; // 1588291200
echo date('Y/m/d H:i:s', $targetDate)."n"; // 2020/05/01 00:00:00

指定日からX日分の日付を取得したい

指定日の日の箇所に日付を足すと取得できます。
末日を超えた場合は次の月が取れます。

下記は2020/05/28から5日分取って表示しています。

for ($i = 0; $i < 5; $i++) {
  $targetDate = mktime(0, 0, 0, 5, 28+$i, 2020);
  echo date('Y/m/d H:i:s', $targetDate)."n";
}

// 2020/05/28 00:00:00
// 2020/05/29 00:00:00
// 2020/05/30 00:00:00
// 2020/05/31 00:00:00
// 2020/06/01 00:00:00

その他の時、分、秒、年、月も足したり、引いたりできます。
詳しくは公式をご確認ください。

strtotime – 日付の文字列からタイムスタンプ作成

概要

引数で渡した日付文字列のタイムスタンプを取得します。

・公式のドキュメントはこちら

指定日のタイムスタンプ取得

$timestamp = strtotime("2020/06/01");

echo $timestamp."n"; // 1590969600

時間まで含めて、取得する場合は下記のように書きます。
日付と時間の間をTで区切って記載します。

$timestamp = strtotime("2020/06/01T18:30:00");

echo $timestamp."n"; // 1591036200
echo date('Y/m/d H:i:s',$timestamp)."n"; // 2020/06/01 18:30:00

文字列で日付比較

2020/06/01より2020/06/02先なのでtrue。

echo strtotime("2020/06/01") < strtotime("2020/06/02") ? 'true' : 'false'; // true

2020/06/01が2020/06/02前なのでfalse。

echo strtotime("2020/06/01") > strtotime("2020/06/02") ? 'true' : 'false'; // false

2020/06/01 1時より2020/06/02 2時が先なのでtrue。

echo strtotime("2020/06/01T01:00") < strtotime("2020/06/01T02:00") ? 'true' : 'false'; // true

time – 現在のタイムスタンプを取得

概要

現在のタイムスタンプを返してくれます。引数はありません。

・公式のドキュメントはこちら

現在のタイムスタンプ取得

echo time(); // 1591105911
echo date('Y/m/d H:i:s', time()); // 2020/06/02 22:51:51

コメント

タイトルとURLをコピーしました