2020.12.31
【PHP基礎】様々な関数⑥ 日付操作関数 date mktime time strtotime
この記事では、
Unixタイムスタンプを日付文字列にするdate、
指定した日付をUnixタイムスタンプにするmktime、
現在の日付をUnixタイムスタンプにするtime、
英文形式の日付文字列をUnixタイムスタンプにするstrtotimeを説明します。
date
date関数は、1970年1月1日の0時0分0秒から、何秒経ったかで、
日付を表す「UNIXタイムスタンプ」を、
人間に読める文字列で示された日付の表記に変換する関数です。
書式文字一覧
書式文字は以下の一覧の通り膨大ですが、
最初に覚えるべきは、2桁の日付を表す「d」、
2桁の月を表す「m」、4桁の年を表す「Y」です。
出力例
<?php //「2020年1月1日1時23分45秒」の形式 $date1=date("Y年n月j日G時i分s秒"); //「2020/01/0101:23:45」の形式 $date2=date("Y/m/dH:i:s"); //「01:23:45AM」の形式 $date3=date("h:i:sA"); //今日の曜日(Sunday~Saturday) $date4=date("l"); //表示 echo$date1; echo"<hr>"; echo$date2; echo"<hr>"; echo$date3; echo"<hr>"; echo$date4; ?>
エスケープ
フォーマット文字列で定義されている文字を出力する場合、バックスラッシュを付けてエスケープする必要があります。
さらに「\t」などの特別な意味を持つ文字に関しては、「\\t」のように2重にエスケープする必要があります。
<?php $date = date("l \\t\h\\e jS"); echo $date; ?>
mktime
mktime関数は、日付をUnixのタイムスタンプとして取得します。
使用例
<?php // 1970年1月1日 10時0分0秒 $ts1 = mktime(10, 0, 0, 1, 1, 1970); echo $ts1; echo "<hr>"; // 以下は同じ $ts2 = mktime(0, 0, 0, 2, 29, 2020); $ts3 = mktime(0, 0, 0, 3, 0, 2020); $ts4 = mktime(-24, 0, 0, 3, 1, 2020); echo $ts2."<br>\n"; echo $ts3."<br>\n"; echo $ts4; ?>
mktimeとdateの組み合わせ例
<?php // 2020年4月1日 $ts1 = mktime(0, 0, 0, 4, 1, 2020); echo date("Y年m月d日", $ts1); echo "<hr>"; // 明日の日付 $ts2 = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")); echo date("Y年m月d日", $ts2); echo "<hr>"; // 今月の1日 $ts3 = mktime(0, 0, 0, date("m"), 1, date("Y")); echo date("Y年m月d日", $ts3); echo "<hr>"; // 今月の最終日 $ts4 = mktime(0, 0, 0, date("m") + 1, 0, date("Y")); echo date("Y年m月d日", $ts4); ?>
time
time関数は、現在のUnixタイムスタンプを返します。
使用例
<?php $tomorrow = time() + (24 * 60 * 60); echo date("Y-m-d", $tomorrow); ?>
strtotime
strtotime関数は、英文形式の日付を Unix タイムスタンプに変換して返します。
使用例
<?php $now = strtotime("now"); $tomorrow = strtotime("tomorrow"); $lastday = strtotime("last day of next month"); $aprilfool = strtotime("2020/4/1"); $sunday = strtotime("next sunday"); $plus5day = strtotime("+5 day"); echo date("Y/m/d", $now); echo "<hr>"; echo date("Y/m/d", $tomorrow); echo "<hr>"; echo date("Y/m/d", $lastday); echo "<hr>"; echo date("Y/m/d", $aprilfool); echo "<hr>"; echo date("Y/m/d", $sunday); echo "<hr>"; echo date("Y/m/d", $plus5day); ?>