HOME


PHPのちょっとしたTIPS

Last Modified : 2003/03/18 (Tue)
No.1 日付・時刻の表示 - time() date() gmdate() filemtime()
まずローカルなタイムスタンプを取得するにはtime()関数を使用します。
<?php echo time() ?>
実行結果 : 1495577999

time()関数は現在時刻を1970年1月1日 00:00:00 GMTからの通算秒として返します。
でも普通の人はこれじゃよく分からないので、date()関数を使用して書式化してあげましょう。
<?php echo date("Y/m/d H:i:s (D)", time()) ?>
実行結果 : 2017/05/24 07:19:59 (Wed)

date()関数の最初の引数に書式を指定します。そこら辺はマニュアルに書いてあるので愛割します。
もし曜日を月、火、水・・・のように日本語で表したければ、ちょっと面倒ですが配列を使えば出来ます。
<?php

$week = array("", "", "", "", "", "", "");
echo date("Y/m/d H:i:s ", time()) . "(" . $week[date("w", time())] . ")";

?>
実行結果 : 2017/05/24 07:19:59 (水)

海外のサーバなんかでサーバのローカル時刻と日本時間がずれている時はgmdate()関数を使用すると良いです。
<?php

$week = array("", "", "", "", "", "", "");
$time = time() + 9*3600;  //GMTとの時差9時間を足す
echo gmdate("Y/m/d H:i:s ", $time) . "(" . $week[gmdate("w", $time)] . ")";

?>
実行結果 : 2017/05/24 07:19:59 (水)

常にこうしておくと、海外に引っ越したときにわざわざ変更を加える必要がなくて良いですね。

それからtime()関数はサーバのローカルなタイムスタンプを返してくれますが、 GMTのタイムスタンプを取得したいときは、date("Z")を使用すると良いです。
<?php

$time = time() - date("Z");  //ローカル時刻にGMTとの時差を引く
echo date("Y/m/d H:i:s (D)", $time);
$time = $time + 9*3600;  //ついでに日本時間を表示
echo "<BR>";
echo date("Y/m/d H:i:s (D)", $time);

?>
実行結果 :
2017/05/23 22:19:59 (Tue)
2017/05/24 07:19:59 (Wed)

Windows版のPHP4.0.4以前はdate("Z")は逆の符号の値を返していました。 PHP4.0.5から修正されたようです。

日本時間を取得する方法としては他にputenv()関数を使って環境変数の"TZ"(Time Zone)を変更してやる方法があります。
そうすることで、time()がそのまま日本時間を返すようになります。
但し、PHPがSafe Modeで動作している場合はユーザが設定できる環境変数の種類に制限があるので、 無料のレンタルサーバなどではこの方法が使えない場合が多いです。
Safe Modeの時にユーザが自由に設定できる環境変数の種類はphp.iniの設定(safe_mode_allowed_env_vars)に依ります。
デフォルトでは"PHP_"で始まる環境変数のみ設定できます。(つまり"TZ"は設定できません)
<?php

putenv("TZ=JST-9");
echo date("Y/m/d H:i:s (D)", time());

?>
実行結果 : 2017/05/24 07:19:59 (Wed)

ついでにファイルの最終更新時刻はfilemtime()関数を使って取得できますが、 これもgmdate()関数を使用することで、海外のサーバでも日本時間で表示が可能になります。
<?php

$lastmod = filemtime(__FILE__);
echo "このファイルの最終更新日は" . gmdate("Y/m/d H:i:s (D)", $lastmod + 9*3600) . "です";

?>
実行結果 : このファイルの最終更新日は2003/03/18 23:05:29 (Tue)です