日付・時刻関数
- 関数一覧
-
checkdate() /
date() /
getdate() /
gettimeofday() /
gmdate() /
gmmktime() /
microtime() /
mktime() /
strtotime() /
time()
- 機能一覧
-
タイムスタンプを得る /
日時を書式化する /
日時の妥当性をチェックする
まず、「タイムスタンプ」とは「サーバ上での、1970年1月1日00時00分00秒 GMT からの経過秒数」を表す整数の事です。よって、「タイムスタンプを得る」という事は、「1970年1月1日00時00分00秒からの経過秒数を得る」という意味になります。
GMT(グリニッジ標準時)とは?
「time()」関数が返す「タイムスタンプ」は「1970年1月1日00時00分00秒 GMT からの経過秒数」ですが、この中の「GMT(グリニッジ標準時)」は・・・、要するに、イギリスでの経過秒数って事になります。
イギリスでの経過秒数なので、全世界どこにあるサーバでも、その場所の時間は関係なく同じ値を返す事になります。
time()
関数
- int time(void)
- 現在のUNIXタイムスタンプ(1970年1月1日00時00分00秒 GMT からの経過秒数)を返す関数です。
以下にサンプル。
<?php
$stamp = time();
echo $stamp;
/*出力例
1086413651
*/
?>
PageTop
mktime()
関数
- int mktime([int 時[, int 分[, int 秒[, int 月[, int 日[, 年[, サマータイム]]]]]]])
- 日時からUNIXタイムスタンプを生成して返す関数です。
- 引数は、右側から順に省略可です。省略した分は、現在の値がセットされます。
「サマータイム」は、サマータイムなら「1」が、そうでない時には「0」が、不明な時は「-1」がセットされます。
以下にサンプル。
<?php
$stamp = mktime(0, 0, 0);
echo $stamp;
/*出力例(当日の00時00分00秒時点のタイムスタンプ)
1086361200
*/
?>
PageTop
gmmktime()
関数
- int gmmktime([int 時[, int 分[, int 秒[, int 月[, int 日[, 年[, サマータイム]]]]]]])
- GMT日時からUNIXタイムスタンプを生成して返す関数です。
- 引数にはGMT日時を指定します。
以下にサンプル。
<?php
$stamp = gmmktime(0, 0, 0, date("n") + 1, date("j"));
echo $stamp;
/*出力例(1ヵ月後の、00時00分00秒時点のタイムスタンプ)
1086393600
*/
?>
PageTop
strtotime()
関数
- int strtotime(string 日時[, int 時点])
- 英文形式の日時をUNIXタイムスタンプに変換して返す関数です。変換の失敗時には「-1」を返します。
- 「時点」にタイムスタンプが指定された場合、その時点からのタイムスタンプを返します。「時点」を省略すると、現在のタイムスタンプがセットされます。
引数に空文字列を指定すると、現在の日時がセットされます。
以下にサンプル。
<?php
$now = time();
$stamp1 = strtotime("5 june 2004");
$stamp2 = strtotime("now");
$stamp3 = strtotime("next hour", $now);
$stamp4 = strtotime("next hour");
$stamp5 = strtotime("+2 weeks +1 day +3 seconds", 0);
$stamp6 = strtotime("hodenasu");
$stamp7 = strtotime("");
echo $now."<br /><br />";
echo $stamp1."<br />";
echo $stamp2."<br />";
echo $stamp3."<br />";
echo $stamp4."<br />";
echo $stamp5."<br />";
echo $stamp6."<br />";
echo $stamp7."<br />";
/*出力例
1086422224 (現在のタイムスタンプ)
1086361200 (2004年6月5日00時00分00秒時点のタイムスタンプ)
1086422224 (現在のタイムスタンプ)
1086429424 (現時点から1時間後のタイムスタンプ)
1086429424 (1時間後のタイムスタンプ)
1296003 (「0」から、15日と3秒後のタイムスタンプ)
-1 (変換失敗)
1086361200 (現在のタイムスタンプ)
*/
?>
PageTop
microtime()
関数
- string microtime(void)
- 現在のUNIXタイムスタンプを「"マイクロ秒 秒"」という形(半角スペース区切り)でマイクロ秒(1000分の1秒)まで返す関数です。
以下にサンプル。
<?php
$stamp = microtime();
echo $stamp;
/*出力例(当日の00時00分00秒時点の、
マイクロ秒数と秒数をスペース区切りで結合した文字列)
0.63224800 1086422865
*/
list($msec, $sec) = explode(" ", $stamp);
echo (float)$sec + (float)$msec;
/*出力例
1086422865.63
*/
?>
なお、サンプル中の「explode()
」は、「第二引数に指定した文字列を第一引数に指定した文字列で分割して、それぞれを要素に持つ配列を返す」という働きをする関数です。「list()
」は、「複数の変数に値をセットする」という関数みたいな言語構造です。ここでは、文字列が2つに分割されて配列となったものをセットしようとしていますが、この時は、配列内の要素がそれぞれの変数にセットされます。
PageTop
「タイムスタンプ」は単なる「経過秒数」を表す整数でしたが、日時を書式化する関数によって、西暦や日付、時間、曜日等を文字列として得られるようになります。
date()
関数
- string date(string フォーマット[, int タイムスタンプ])
- 「タイムスタンプ」を元に、指定した「フォーマット(下表参照)」で書式化された日時(ローカル:サーバがある場所での日時)を表す文字列を返す関数です。
- 「タイムスタンプ」が省略された場合、「
time()
」の値が自動的にセットされます。
以下にサンプル。
<?php
$stamp = time();
$date = date('\no\w Y/m/d(D) H:i', $stamp);
echo $date;
/*出力例(現在の、「西暦/月/日(曜日) 時:分」)
now 2004/06/05(Sat) 18:08
*/
?>
第一引数に指定した文字列の中の、この関数において特別な意味を持つ「フォーマット文字」が、日時に変換されています。変換させたくない文字は、「\(円マーク)」でエスケープします。
「フォーマット文字」には、以下のものがあります。
フォーマット文字 | 変換 | 戻り値 |
y | 年(2桁表記) | 04 |
Y | 年(4桁表記) | 2004 |
n | 月(先頭にゼロを付けない) | 1 ~ 12 |
m | 月(2桁表記) | 01 ~ 12 |
M | 月(3文字形式) | Jan ~ Dec |
F | 月(フルスペルの文字) | January ~ December |
j | 日(先頭にゼロを付けない) | 1 ~ 31 |
d | 日(2桁表記) | 01 ~ 31 |
w | 曜日(整数) | 0(日曜) ~ 6(土曜) |
D | 曜日(3文字のテキスト) | Mon ~ Sun |
l | 曜日(フルスペル形式) | Sunday ~ Saturday |
a | 午前または午後(小文字) | am または pm |
A | 午前または午後(大文字) | AM または PM |
g | 時(12時間単位) | 1 ~ 12 |
h | 時(12時間単位、2桁表記) | 01 ~ 12 |
G | 時(24時間単位) | 0 ~ 23 |
H | 時(24時間単位、2桁表記) | 00 ~ 23 |
i | 分(2桁表記) | 00 ~ 59 |
s | 秒(2桁表記) | 00 ~ 59 |
L | 閏年であるか否か | 1 または 0 |
t | その月の日数 | 28 ~ 31 |
S | 日付の英語形式の序数に対応した接尾辞 | st, nd, rd, th |
z | 年間の通算数 | 0 ~ 366 |
W | ISO-8601 月曜開始の年単位の週番号 | 23(週目) |
O | グリニッジ標準時(GMT)との時間差 | +0900 |
r | RFC 822 フォーマットされた日時 | Sat, 5 Jun 2004 18:44:59 +0900 |
T | サーバのタイムゾーン | 東京 (標準時) |
B | Swatch Internet Time | 000 ~ 999 |
I | サマータイム制か否か | 1 または 0 |
U | Unixタイムからの秒数 | タイムスタンプと同じ |
Z | タイムゾーンのオフセット秒数 | -43200 ~ 43200 |
PageTop
gmdate()
関数
- string gmdate(string フォーマット[, int タイムスタンプ])
- 返される値がグリニッジ標準時(GMT)である事意外、「
date()
関数」と同じ。
- GMTは全世界何処でも同じ値(イギリスの日時)なので、特定の場所の日時を見知らぬ地のサーバで出力させたい場合に、時差分を調整しながら使います。
- ちなみに、イギリスと日本の時差はマイナス9時間なので、日本の日時を得たい場合は、9時間プラスします。
以下にサンプル。
<?php
$stamp = time();
$date = date('\no\w Y/m/d(D) H:i', $stamp);
$gmdate = gmdate('\no\w Y/m/d(D) H:i', $stamp);
$now_hour = gmdate('H') + 9; //時差分補完
echo "date : ", $date, "<br />",
"gmdate : ", $gmdate, "<hr />",
"now hour : ", $now_hour;
/*出力例(現在の、「西暦/月/日(曜日) 時:分」)
date : now 2004/06/06(Sun) 15:54 ← ローカル日時(日本)
gmdate : now 2004/06/06(Sun) 06:54 ← GMT日時(イギリス)
----------------------------------------------------------------
now hour : 15
*/
?>
PageTop
getdate()
関数
- array getdate([int タイムスタンプ])
- 「タイムスタンプ」を元に、日時に関する情報を要素に持つ連想配列を生成して返す関数です。
- 「タイムスタンプ」が省略された場合、現在の値がセットされます。
以下にサンプル。
<?php
$stamp = time();
echo "<pre>";
print_r( getdate($stamp) );
//「print_r()」は、「配列の中身を出力する」関数です。
echo "</pre>";
/*出力例
Array
(
[seconds] => 44
[minutes] => 16
[hours] => 15
[mday] => 6
[wday] => 0
[mon] => 6
[year] => 2004
[yday] => 157
[weekday] => Sunday
[month] => June
[0] => 1086502604
)
*/
?>
この関数が生成する配列の添え字と要素は以下のようになっています。
添え字 | 意味 | 戻り値 |
seconds | 秒 | 0 ~ 59 |
minutes | 分 | 0 ~ 59 |
hours | 時(24時間単位) | 0 ~ 23 |
mday | 月単位の日にち | 1 ~ 31 |
wday | 曜日(数値) | 0(日曜) ~ 6(土曜) |
mon | 月(数値) | 1 ~ 12 |
year | 年(4桁表記) | 2004 |
yday | 年単位の日にち | 0 ~ 366 |
weekday | 曜日(フルスペル) | Sunday ~ Saturday |
month | 月(フルスペル) | January ~ December |
0 | タイムスタンプ | タイムスタンプ |
PageTop
gettimeofday()
関数
- array gettimeofday(void)
- 現在の時間に関する情報を要素に持つ連想配列を生成して返す関数です。
以下にサンプル。
<?php
echo "<pre>";
print_r( gettimeofday() );
//「print_r()」は、「配列の中身を出力する」関数です。
echo "</pre>";
/*出力例
Array
(
[sec] => 1086503857
[usec] => 429041
[minuteswest] => -540
[dsttime] => 0
)
*/
?>
この関数が生成する配列の添え字と要素は以下のようになっています。
添え字 | 意味 | 戻り値 |
sec | 秒 | タイムスタンプ |
usec | マイクロ秒 | タイムスタンプ(小数点以下) |
minuteswest | グリニッジ基準の分 | -540(時差の様な?) |
dsttime | サマータイム制か否か | 1 または 0 |
PageTop
checkdate()
関数
- int checkdate(int 月, int, 日, int 年)
- 指定された(グレゴリオ暦の)日付の妥当性をチェックし、その日付があり得るか否かを真偽値で返す関数です。
以下にサンプル。
<?php
for($year = 2004; $year < 2014; $year++){
$uruu = checkdate(2, 29, $year) ? "OK!" : "HODENASU!";
echo "{$year} is {$uruu}<br />";
}
/*出力例(閏年か否かを出力)
2004 is OK!
2005 is HODENASU!
2006 is HODENASU!
2007 is HODENASU!
2008 is OK!
2009 is HODENASU!
2010 is HODENASU!
2011 is HODENASU!
2012 is OK!
2013 is HODENASU!
*/
?>
カレンダーなんか作る時に使うと便利そうです。
PageTop
作成日:2004年06月04日 最終更新日:2004年06月06日
【通常モード で表示】