【PHP】日本時間の現在時刻をtime関数とdate関数で表示する

【PHP】日本時間の現在時刻をtime関数とdate関数で表示する プログラミング

「PHPで現在時刻を取得したい」
「PHPで日本時間を確実に表示したい」
「PHPのタイムゾーンがよくわからない・・・」

このような場合には、この記事の内容が参考となります。
この記事では、PHPで日本時間の現在時刻を表示する方法を解説しています。

具体的には、time関数とdate関数を中心とした説明です。
また、PHPのタイムゾーンについても説明しています。

本記事の内容

  • time関数
  • date関数
  • PHPのタイムゾーン
  • 【動作確認】タイムゾーン別現在時刻

それでは、上記に沿って解説していきます。

time関数

time関数は、現在時刻をUnix エポック (1970 年 1 月 1 日 00:00:00 GMT) からの通算秒として返します。
ポイントとして、Unixタイムスタンプにはタイムゾーンは無関係と言うことです。
唯一関係あるとしたら、グリニッジ標準時(GMT)です。

では、ここでtime()の返す値を確認しましょう。

1640043660

よく見るヤツです。
time関数が戻す値には、次の特徴があります。

  • タイムゾーンは無関係(GMTベース)
  • Unixエポック (1970 年 1 月 1 日 00:00:00 GMT) からの通算秒

以上、time関数の説明でした。
次は、date関数を確認します。

date関数

「ローカル」というワードに注目です。
これは、タイムゾーンが関係するということになります。

そして、date関数は日付・時刻の書式化を行うのです。
時刻(タイムスタンプ)を取得するなんて一言も書いていません。

date(string $format, ?int $timestamp = null): string

$formatには、書式を設定します。
$timestampには、Unixタイムスタンプを設定します。

そして、この$timestampは省略できます。
省略した場合は、time()の値がデフォルトで設定されます。

ここでdate関数の特徴をまとめておきます。

  • タイムゾーンに依存する
  • タイムスタンプを取得する機能はない(time関数の利用)
  • 設定されたタイムスタンプの表示部分に関する機能を持つ

この特徴を意識して、次のコードを見てください。

echo date('Y年m月d日 H:i:s', time());

実行結果は、以下。

2021年12月21日 9:09:00

日本時間の現在時刻としては、正しい結果です。
でも、一つ疑問に感じませんか?

「タイムゾーン」に関する指定が、上記コードのどこにもありません。
それなのに、日本のタイムゾーンを適切に認識して処理しています。
このことを理解するには、PHPのタイムゾーンを理解しておく必要があります。

以上、date関数の説明でした。
次は、PHPのタイムゾーンを確認します。

PHPのタイムゾーン

まずは、date関数が日本時間の現在時刻を表示した理由を説明しましょう。
答えは、次の関数にあります。

date_default_timezone_get関数を実行してみましょう。

echo date_default_timezone_get();

結果は、以下。

おそらく、みなさんの環境でも「Asia/Tokyo」が表示されるはずです。
phpinfo()の結果でも、「Asia/Tokyo」を確認できます。

では、これはどこで設定されているのでしょうか?
通常は、php.iniで設定されています。

php.ini

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Tokyo

実は、設定されていない場合もあります。
その場合は、OSのタイムゾーンが適用されているはずです。
そのおかげで、php.iniの設定がなくてもセーフと言うのはありえます。

以上、PHPのタイムゾーンを説明しました。
次は、動作確認としてタイムゾーン別の現在日時の確認を行います。

【動作確認】タイムゾーン別現在時刻

タイムゾーンが異なれば、現在時刻も異なるはずです。
そこで、タイムゾーンをコード内で変更してその動作を確認します。

タイムゾーンを変更するには、次の関数を利用します。

この関数を利用しているのが、以下のコードです。

<?php

$unitime = time();

dipslay_datetime($unitime, 'America/Los_Angeles');
dipslay_datetime($unitime, 'GMT');
dipslay_datetime($unitime, 'Asia/Tokyo');


function dipslay_datetime($unix_timestamp, $tz){
    date_default_timezone_set($tz);
    $script_tz = date_default_timezone_get();
    echo $script_tz;
    echo "<br />";
    echo date('Y年m月d日 H:i:s', $unix_timestamp);
    echo "<hr />";
}

?>

dipslay_datetimeという関数を設けています。
内容は、説明する必要がないほど単純です。

そして、上記コードを実行した結果は以下となります。

この結果より、PHPのタイムゾーンが理解できます。
また、time関数とdate関数に関しても理解が進んだはずです。

以上、【動作確認】タイムゾーン別現在時刻の説明でした。

タイトルとURLをコピーしました