日付・時刻関数

関数一覧
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
WISO-8601 月曜開始の年単位の週番号23(週目)
Oグリニッジ標準時(GMT)との時間差+0900
rRFC 822 フォーマットされた日時Sat, 5 Jun 2004 18:44:59 +0900
Tサーバのタイムゾーン東京 (標準時)
BSwatch Internet Time000 ~ 999
Iサマータイム制か否か1 または 0
UUnixタイムからの秒数タイムスタンプと同じ
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
    )
    */
?>

この関数が生成する配列の添え字と要素は以下のようになっています。

添え字意味戻り値
seconds0 ~ 59
minutes0 ~ 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日
【通常モード で表示】