日時情報の取得
そふぃのPHP入門 >> PHP実践リファレンス >> 日付・時刻処理 >> 日時情報の取得

日時情報の取得

日付情報を連想配列で取得する―getdate関数

getdate()関数は指定したタイムスタンプの日時を連想配列として取得する関数です。連想配列となっているので、date()関数のフォーマット文字よりも直感的に目的の値が取り出せます。例えば、「年」を取り出すキーは yearですし、「分」はminituesです。これがdate()になると「年」のフォーマット文字がYもしくはyとなりますし、「分」はiとなります。date()の利点は様々な形式で値を取り出せる事ですが、単純に年を出力したいだけ、などの場合はgetdate()関数の方が多少分かりやく、楽に使えるかもしれません。

参考関数

  • getdate() ---- 日付・時刻を連想配列にして取得する

書式

  • array getdate( [ int timestamp ] )

getdate()の使用方法はとても簡単で、タイムスタンプを指定するだけです。タイムスタンプを指定すると日時の情報を配列にして返してくれます。どのような配列が返ってくるかは以下を参照して下さい。

getdate()関数が返す連想配列一覧
キー 値の意味
year 年の値(4桁) 2005 など
yday 年単位の日 0 ~ 365
mon 月の値(数値) 1 ~ 12
month 月の値(フルスペル) January ~ December
mday 日付の値 1 ~ 31
wday 曜日の値(数値) 0(日曜) ~ 6(土曜)
weekday 曜日の値(フルスペル) Sunday ~ Saturday
hours 時の値 0 ~ 23
minutes 分の値 0 ~ 59
seconds 秒の値 0 ~ 59
0 タイムスタンプ値 の値と同様。 1121011416 など

getdate()を使ったサンプルです。

getdate()サンプル

  1. <?php
  2. $now = getdate(); // 現在時刻の情報を持った配列を作成
  3. $month = $now['mon']; // 今月
  4. $today = $now['mday']; // 今日
  5. $year = $now['year']; // 今年
  6.  
  7. // 「来年の今日」の日時情報を持った配列を作成
  8. $nextyear = getdate( mktime( 0, 0, 0, $month, $today, $year+1 ) );
  9.  
  10. // 現在時刻の方の配列情報出力
  11. echo '<pre>';
  12. print_r($now);
  13. echo '</pre>';
  14.  
  15. // 今日の日付と時間を出力
  16. echo '今日は';
  17. echo $year.''.$month.''.$today.'';
  18. echo $now['minutes'].'';
  19. echo $now['minutes'].'';
  20. echo $now['hours'].'';
  21. echo $now['minutes'].'';
  22. echo $now['seconds'].'';
  23. echo "<br />\n";
  24. echo '来年の今日の曜日は'.$nextyear['weekday'];
  25. ?>

出力結果

Array
(
    [seconds] => 45
    [minutes] => 25
    [hours] => 14
    [mday] => 28
    [wday] => 3
    [mon] => 6
    [year] => 2017
    [yday] => 178
    [weekday] => Wednesday
    [month] => June
    [0] => 1498627545
)
今日は2017年6月28日 25分25分14時25分45秒
来年の今日の曜日はThursday

今回は「現在時刻」の配列と「来年の今日」の配列の2つを作ってます。

日付情報を配列または連想配列で取得する―localtime関数

localtime()関数も指定したタイムスタンプの日時を配列として取得する関数ですが、上記のgetdate()関数とは取得できる形式が多少違います。また、getdate()関数では日付情報を連想配列で取得していましたが、localtime()関数では連想配列で取得するか、普通の数字添え字の配列で取得するかを選択する事ができます。

参考関数

  • localtime() ---- 日付・時刻を配列または連想配列にして取得する

書式

  • array localtime( [ int timestamp [, bool is_associative ]] )

第1引数にタイムスタンプを、第2引数に取得する配列の形式を指定します。

第2引数の配列の形式(is_associative)は数値配列で返すか、連想配列で返すかです。省略した場合はFALSEまたは0が指定されたとみなされ、数値をキーとした通常の配列が返されます。連想配列としたければTRUEもしくは1を指定します。

localtime()関数が返す連想配列一覧
キー(数値) キー(連想配列) 値の意味
0 tm_sec 秒の値 0 ~ 59
1 tm_min 分の日 0 ~ 59
2 tm_hour 時の値 0 ~ 23
3 tm_mday 日付の値 1 ~ 31
4 tm_mon 月の値 0 ~ 11
5 tm_year 年の値
HTML_KOME1900年からの年数
100 など
6 tm_wday 曜日の値(数値) 0(日曜) ~ 6(土曜)
7 tm_yday 日付の値(年単位) 0 ~ 364
8 tm_isdst サマータイムフラグ 1 or 0

localtime()を使ったサンプルです。

localtime()サンプル

  1. <?php
  2. // 現在時刻を連想配列として取得
  3. $now = localtime( time(), true );
  4.  
  5. // 配列情報を表示
  6. echo "<pre>";
  7. print_r($now);
  8. echo "</pre>";
  9. ?>

出力結果

Array
(
    [tm_sec] => 45
    [tm_min] => 25
    [tm_hour] => 14
    [tm_mday] => 28
    [tm_mon] => 5
    [tm_year] => 117
    [tm_wday] => 3
    [tm_yday] => 178
    [tm_isdst] => 0
)

現在時刻を連想配列で取得する―gettimeofday関数

Linux、Solaris、WindowsなどのOSではgettimeofday()関数が使用できます。gettimeofday()関数は現在時刻を連想配列にして取得してくれる関数です。

引数も必要ないので使いやすいのですが、取得してくれる情報があまり役に立たないのがちょっと難点。。

参考関数

書式

  • mixed gettimeofday( [ bool return_float ] )

PHP5.1.0以降オプション引数のreturn_floatがあります。この引数がtrueに設定された場合、返り値がfloat型(浮動小数点型)になります。

それ以前のバージョンでは引数は必要なく、常に

  1. gettimeofday();

として使います。

ローカルの現在時刻の情報を持った連想配列が返されます。連想配列のキーと要素は以下をご覧下さい。

gettimeofday()関数が返す連想配列一覧
キー 値の意味
sec タイムスタンプの値
usec マイクロ秒の値
minuteswest GMTとの差を分で表わした値
dsttime サマータイム補正の型。サマータイムなら1、そうでないなら0

この関数はOSのシステムコール、 gettimeofday(2) という機能から現在時刻を生成する為、 gettimeofday(2) がサポートされていないOS上では使えません。とは言っても、Linux、Solaris、Windowsなどの主要なOSでは使えるようです。

gettimeofday()を使ったサンプルです。

gettimeofday()サンプル

  1. <?php
  2. $today = gettimeofday(); // 現在時刻情報を持った配列を取得
  3.  
  4. // 取得した連想配列の情報を表示
  5. echo '<pre>';
  6. print_r($today);
  7. echo "</pre>";
  8.  
  9. // 各要素にアクセスするにはこのようにします。
  10. echo 'タイムスタンプ:'.$today['sec']."<br />\n"; // time()関数の値と同様
  11. echo 'マイクロ秒の値:'.$today['usec']."<br />\n";
  12. echo 'GMTとの差(分):'.$today['minuteswest']."<br />\n";
  13. echo 'サマータイムフラグ:'.$today['dsttime']; // サマータイムは当然0
  14. ?>

出力結果

Array
(
    [sec] => 1498627545
    [usec] => 704675
    [minuteswest] => -540
    [dsttime] => 0
)
タイムスタンプ:1498627545
マイクロ秒の値:704675
GMTとの差(分):-540
サマータイムフラグ:0