インターネットのコンテンツはワールドワイドで参照できる。したがって、タイムスタンプの表示が必要なときは、タイムゾーンを明示――クライアントのある地域の現地時間なのか、それともサーバのある地域の現地時間なのか、はたまた世界標準時なのか――する必要がある。
そこで今回は、与えた日時をインターネットの標準形式であるRFC3339形式で表示するプログラムを紹介する。
0001: <?php
0002: // ここからPHPプログラム =======================================================
0003: /** RF3339.php
0004: * RFC3339形式のタイムスタンプを表示する
0005: * @copyright (c)studio pahoo
0006: * @author パパぱふぅ
0007: * @version 1.0 2005/06/26
0008: *
0009: */
0010: /**
0011: * UNIXタイムスタンプからRFC3339 UTC タイムスタンプを返す
0012: * @param int $unix UNIXタイムスタンプ,Unix epoch(1970年1月1日 00:00:00 GMT))からの通算秒
0013: * @return RFC3339 UTC
0014: */
0015: function unix2utc($unix) {
0016: return (gmdate("Y-m-d", $unix) . "T" . gmdate("H:i:s", $unix) . "Z");
0017: }
0018:
0019:
0020: /**
0021: * RFC3339 UTC タイムスタンプをローカルのタイムスタンプに変換する
0022: * @param int $ UNIXタイムスタンプ,Unix epoch(1970年1月1日 00:00:00 GMT))からの通算秒
0023: * @param String $utc RFC3339 UTCタイムスタンプ
0024: * @param int tz_hour UTCと地方時の差(時間)
0025: * @param int tz_min UTCと地方時の差(分),省略可能
0026: * @return ローカルのタイムスタンプ(RF3339表記)/NULL=エラー(入力文字列が規定外など)
0027: */
0028: function utc2local() {
0029: //可変長変数を使う
0030: if (func_num_args() < 2) return NULL;
0031: $utc = func_get_arg(0);
0032: $tz_hour = func_get_arg(1);
0033: $tz_min = (func_num_args() >= 3) ? func_get_arg(2) : (0);
0034:
0035: if (preg_match("/[0-9]+-[0-9]+-[0-9]+T[0-9]+:[0-9]+:[0-9]+Z/", $utc) == 1) {
0036: list($year, $month, $day, $hour, $minuite, $second) = sscanf($utc, "%d-%d-%dT%d:%d:%dZ");
0037: } else if (preg_match("/[0-9]+-[0-9]+-[0-9]+T[0-9]+:[0-9]+Z/", $utc) == 1) {
0038: list($year, $month, $day, $hour, $minuite) = sscanf($utc, "%d-%d-%dT%d:%dZ");
0039: $second = 0;
0040: } else if (preg_match("/[0-9]+-[0-9]+-[0-9]+T[0-9]+Z/", $utc) == 1) {
0041: list($year, $month, $day, $hour, $minuite) = sscanf($utc, "%d-%d-%dT%dZ");
0042: $minuite = 0; $second = 0;
0043: } else if (preg_match("/[0-9]+-[0-9]+-[0-9]+Z/", $utc) == 1) {
0044: list($year, $month, $day, $hour, $minuite) = sscanf($utc, "%d-%d-%dZ");
0045: $hour = 0; $minuite = 0; $second = 0;
0046: } else {
0047: return NULL; //UTC書式エラー
0048: }
0049:
0050: $tt = mktime($hour + $tz_hour, $minuite + $tz_min, $second, $month, $day, $year);
0051:
0052: $s = date("Y-m-d", $tt) . "T" . date("H:i:s", $tt);
0053: $f = ($tz_hour < 0) ? "-" : "+";
0054:
0055: return sprintf("%s%s%02d:%02d", $s, $f, abs($tz_hour), $tz_min);
0056: }
0057:
0058:
0059: // メインプログラム ============================================================
0060: $utc = unix2utc(time()); //内蔵時計の日時をUTCに変換する
0061: $local = utc2local($utc, 9); //JST = UTC + 09:00
0062:
0063: printf("<pre>\n");
0064: printf("UTC : %s<br />\n", $utc);
0065: printf("JST : %s<br />\n", $local);
0066: printf("</pre>\n");
0067: ?>
0068:
| 2005年06月27日更新 | ||
| <<前へ | <目次> | 次へ>> |
| 戻る | 【関連ページ】 | |