日付,時刻

PHP では様々な形式に編集して日付や時刻を表示出来るのですが、その一部を紹介します。

プログラムの作成-1

Date.php のソースコードを utf-8(BOM 無し)でタイプして c:\DATA\PHP\ に格納して下さい。
<?php
    date_default_timezone_set("Asia/Tokyo"); 
    echo date("Y/m/d  H:i:s") . "\r\n";
    echo date("y/m/d  h:i:s");
?>

【実行画面】
コマンドプロンプトを起動して Date.php をコンパイルします。
Date.php の実効結果です。
西暦年に "Y" を使った時と "y" を使った時では印字が違っています。
Microsoft Windows [Version 10.0.18363.836]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\maeda>cd c:\data\php

c:\DATA\PHP>php date.php
2020/05/21  16:28:33
20/05/21  04:28:33
c:\DATA\PHP>

プログラムの説明

  1. date_default_timezone_set("Asia/Tokyo"); でタイムゾーンを日本(東京)に設定しています。
    date() が日付,時刻を取得する関数で、第一パラメータに編集方法を指定します。
    Y: 西暦を4桁で表示します。
    y: 西暦を下2桁で表示します。
    H: 時間を24時間形式で表示します。
    h: 時間を12時間形式で表示します。
  2. 「. "\r\n";」の「.」は文字列の連結演算子で、「\r\n」は復帰/改行です。
  3. date_default_timezone_set("Asia/Tokyo"); の行を削除して実行すると世界標準時になります。
    Warning: が出ているのですが、東京とは9時間の時差で正常に印字されています。
    以前はグリニッジ標準時(GMT)と言ったのですが、最近は協定世界時(UTC)と呼ぶようです。
    C:\DATA\PHP>php date.php
    
    Warning: date(): It is not safe to rely on the system's timezone settings. You a
    re *required* to use the date.timezone setting or the date_default_timezone_set(
    ) function. In case you used any of those methods and you are still getting this
     warning, you most likely misspelled the timezone identifier. We selected the ti
    mezone 'UTC' for now, but please set date.timezone to select your timezone. in C
    :\DATA\PHP\date.php on line 3
    2015/03/29  05:01:03
    

プログラムの作成-2

Date2.php を Shift-JIS でタイプして、年月日, 時分秒で編集して印字してみました。
<?php
    date_default_timezone_set("Asia/Tokyo"); 
    echo date("Y年m月d日  H時i分s秒") . "\r\n";
?>

【実行画面】
意味不明の結果が印字されました。
Microsoft Windows [Version 10.0.18363.836]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\maeda>cd \data\php

C:\DATA\PHP>php date2.php
202040521  160329b

調査

  1. Date2.php を Shift-JIS でタイプして実行すると、意味不明の結果が印字されます。
    印字される文字コードが原因では無いかと思い、実行結果を w にリダイレクトしてみました。
    C:\DATA\PHP>php date2.php > w
    
  2. 思った通り w を Shift-JIS で開くと次のようなっていました。
    2020・05月21日  16時04分10秒
    
  3. 何故か「年」だけが文字化けしています。
    「年」を16進数で確認すると、確かに文字化けしていました。
    はっきりした事は言えませんが、コンパイラの文字変換ミスではないでしょうか?
    PHP のプログラムは utf-8(BOM 無し)でタイプするのが無難なようです。

プログラムの作成-3

タイムスタンプを記録するだけなら time() 関数がお勧めです。
Date3.php のソースコードを utf-8(BOM 無し)でタイプして c:\DATA\PHP\ に格納して下さい。
<?php
    $tim= time();
    echo "$tim \r\n";
    echo gmdate("Y/m/d  H:i:s", $tim+9*3600);
?>

【実行画面】
Microsoft Windows [Version 10.0.18363.836]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\maeda>cd \data\php

C:\DATA\PHP>php date3.php
1590045647
2020/05/21  16:20:47

プログラムの説明

  1. タイムスタンプを記録するだけなら time() 関数がお勧めです。
    time()関数は、現在時刻を 1970年1月1日 00:00:00 GMT からの通算秒として返します。
        $tim= time();
        echo "$tim \r\n";
    
  2. 記録したタイムスタンプを年/月/日に編集して印字してみました。
    $tim+9*3600 は日本時間(GMT から9時間のずれ)に変換しています。
        echo gmdate("Y/m/d  H:i:s", $tim+9*3600);
    

前田稔の超初心者のプログラム入門
PHP Program