PHPの基礎 - 日時
概要
PHPの組み込み関数において、日時に関する関数を記載する。
日時を取得する(time, date)
日時を指定するフォーマットを取得する。
string date(string format [, int timestamp]) 引数で指定したフォーマットで日付文字列を取得する。 2番目の引数で、取得する日時を指定する。省略する場合は、現在の日時を取得する。 引数: format 日付のフォーマット timestamp フォーマットの対象となる日時 戻り値: フォーマットされた日付文字列
フォーマットの対象となるタイムスタンプで指定可能な範囲は、Fri, 13 Dec 1901 20:45:54 GMTからTue, 19 Jan 2038 03:14:07 GMTまでとなっている。
省略する場合は、time
関数で取得できる現在日時の値が対象となる。
下表に、指定可能なフォーマットの種類を示す。
フォーマット | 意味 | 例 |
---|---|---|
j | 日(ゼロパディング無し) | 1から31 |
d | 日(ゼロパディング) | 01から31 |
D | 曜日(3文字のテキスト形式) | MonからSun |
l | 曜日(フルスペル形式) | SundayからSaturday |
N | ISO-8601形式における曜日の数値表現 | 1(月曜日)から7(日曜日) |
S | 英語形式の序数を表すサフィックス(2文字) | st、nd、rdまたはth jと一緒に使用する |
w | 曜日。数値 | 0(日曜)から6(土曜) |
W | ISO-8601形式における月曜日から始まる年単位の週番号(数値) | 例: 42(1年の第42週目) |
z | 年間の通算日(ゼロから開始) | 0から365 |
フォーマット | 意味 | 例 |
---|---|---|
m | 月(ゼロパディング無し) | 1から12 |
n | 月(ゼロパディング) | 01から12 |
M | 月(3文字のテキスト形式) | JanからDec |
F | 月(フルスペル形式) | JanuaryからDecember |
t | 指定した月の日数 | 28から31 |
フォーマット | 意味 | 例 |
---|---|---|
y | 年(2桁の数字) | 例: 99、03、10 |
Y | 年(4桁の数字) | 例: 1999、2003、2010 |
o | ISO-8601形式の年 Yとほぼ同じであるが、ISO週番号(W)が前年あるいは翌年に属する場合がある点で異なる |
例: 1999、2003、2010 |
L | 閏年であるかどうかを表す論理値 | 1 : 閏年 0 : 閏年ではない |
フォーマット | 意味 | 例 |
---|---|---|
s | 秒(ゼロパディング) | 00から59 |
i | 分(ゼロパディング) | 00から59 |
h | 時(12時間単位、ゼロパディング) | 01から12 |
H | 時(24時間単位、ゼロパディング) | 00から23 |
g | 時(12時間単位、パディング無し) | 1から12 |
G | 時(24時間単位、パディング無し) | 0から23 |
a | 午前または午後(小文字) | amまたはpm |
A | 午前または午後(大文字) | AMまたはPM |
B | スウォッチインターネット時間(Swatch) | 000から999 |
フォーマット | 意味 | 例 |
---|---|---|
e | タイムゾーン識別子 | 例: UTC、GMT、Atlantic / Azores |
l | サマータイム中かどうか | 1 : サマータイム 0 : サマータイムではない |
O | グリニッジ標準時(GMT)との時間差 | 例: +0900 |
T | サーバのタイムゾーンの設定 | 例: EST、MDT ... |
Z | タイムゾーンのオフセット秒数 UTCの西側のタイムゾーン用のオフセットは常に負である。 UTCの東側のオフセットは常に正である。 |
-43200から43200 |
フォーマット | 意味 | 例 |
---|---|---|
c | ISO8601形式の日付 | 例: 2020-01-01T15:19:21+00:00 |
r | RFC822に基づく日付 | 例: Thu, 21 Jan 2020 16:01:07 +0200 |
U | Unix時(1970年1月1日0時0分0秒)からの秒数 | -- |
例えば、2020年01月01日のような日付文字列を取得する場合は、date('Y年m月d日');
と記述する。
このように、フォーマット文字列で定義されていない文字を記述する場合、単に文字列として表示する。
また、フォーマット文字列と同じ文字において、文字として表示する場合は、¥
でエスケープする。
date('Y m d'); --> 2020 01 01 date('Y年m月d日'); --> 2020年01月01日 date('d day'); --> 01 01am20 date('d ¥d¥a¥y'); --> 01 day date('c');
※注意
文字をエスケープした結果、ダブルクォーテーションで囲まれた文字列の中で特別な意味を持つ文字になることがある(例: ¥n
等)
これを避けるには、¥¥n
のように¥自身もエスケープする必要がある。
次に、第2引数であるタイムスタンプについても記載する。
第2引数を省略する場合は、初期値としてtime
関数で取得できる現在時刻がフォーマットの対象となる。
int time(void) 現在時刻をUnix時刻(1970年1月1日 00:00:00 GMT)からの通算秒として返す。 引数: なし 戻り値: 通算の秒を表す数値
Unix時刻とは、1970年1月1日 00:00:00を0として、1秒経過するごとに1ずつ増加させた値となる。
例えば、この値を使用して取得した値に+60した値は、現在より1分後の時間となる。
日時を個々に取得する(getdate)
日時の各値を個々に取得するには、時間・分・秒等を連想配列で取得する。
array getdate([int timestamp]) 日付情報を有する連想配列を取得する。 第1引数に取得する日時を指定するが、省略する場合は現在の日時を取得する。 引数: timestamp 取得の対象となる日時 戻り値: 各値が格納された連想配列
下表に、キーに対応する形で日時に関する各値を取得する。
キー | 対応する値 | 例 |
---|---|---|
seconds | 秒(数値) | 例: 0から59 |
minutes | 分(数値) | 例: 0から59 |
hours | 時(数値) | 例: 0から23 |
mday | 月単位の日(数値) | 例: 1から31 |
wday | 曜日(数値) | 例: 0(日曜)から6(土曜) |
mon | 月(数値) | 例: 1から12 |
year | 年(4桁の数値) | 例: 1999、2003、2020 |
yday | 年単位の日(数値) | 例: 0から365 |
weekday | 曜日(フルスペルの文字) | 例: SundayからSaturday |
month | 月(フルスペルの文字) | 例: January から December |
0 | UNIX時刻(1970年1月1日)からの秒数 | 通常は、-2147483648から2147483647 |
以下のように、getdate関数で値を取得した後、各値を連想配列のキーを指定して取得する。
$today = getdate();
print($today['month']);
print($today['hours'].'時'.$today['minutes'].'分'.$today['seconds'].'秒');
以下の例では、現在時刻を取得して表示している。
<?php
$today = getdate();
print($today['year'].'年'.$today['mon'].'月'.$today['mday'].'日');
print($today['hours'].'時'.$today['minutes'].'分'.$today['seconds'].'秒');
//-> 2020年1月1日15時30分50秒
?>
日時からタイムスタンプを取得する(mktime)
年月日と時間を指定して、その日時のタイムスタンプを取得する方法を記載する。
タイムスタンプとは、1970年1月1日00:00:00 GMTから指定された時刻までの通算秒を表す数値である。
int mktime([int hour [, int minute [, int second [, int month [, int day [, int year]]]]]]) タイムスタンプを表す数値を取得する。 引数は右から省略可能で、省略する引数は現在の値が使用される。 引数: hour 時間 minute 分 second 秒 month 月 day 日 year 年 戻り値: タイムスタンプを表す数値
以下の例では、現在の日時が2020/01/01の場合である。
$timestamp = mktime(9, 12, 30); //--> 2006/05/03 9:12:30のタイプスタンプ
$timestamp = mktime(9, 12, 30, 6); //--> 2006/06/03 9:12:30のタイプスタンプ
$timestamp = mktime(9, 12, 30, 6, 17); //--> 2006/06/17 9:12:30のタイプスタンプ
また、ある日付の45日後のタイムスタンプを求める場合は、以下のように記述する。
9行目のmktime(0, 0, 0, 10, 46, 2020);
では、日付の値が10月46日となるが、自動的に計算される。
// 日付を2020/10/01とする
$today_month = 10;
$today_day = 1;
$today_year = 2020;
$timestamp = mktime(0, 0, 0, $today_month, $today_day, $today_year);
$today_day += 45;
$new_timestamp = mktime(0, 0, 0, $today_month, $today_day, $today_year);
以下の例では、現在の日付から50日後のタイムスタンプを求めて表示している。
<?php
$today = getdate();
$today_month = $today['mon'];
$today_day = $today['mday'];
$today_year = $today['year'];
$timestamp = mktime(0, 0, 0, $today_month, $today_day, $today_year);
print('現在の日時は<br>');
print(date('Y年m月d日', $timestamp).'<br>');
print('です。<br>');
print('タイムスタンプは'.$timestamp.'です。<br><br>');
print('今日から45日後は<br>');
$today_day += 50;
$timestamp = mktime(0, 0, 0, $today_month, $today_day, $today_year);
print(date('Y年m月d日', $timestamp).'<br>');
print('です。<br>');
print('タイムスタンプは'.$timestamp.'です。<br>');
?>