こんにちは、てっちーです。PHPで日付や時間を表示させるとき、文字列へ変換する必要があります。また文字列として取得した日時を、時間として扱いたい場合は、文字列から時間へ変換します。そういった時に使える文字列と日付・時間の変換する方法を紹介します。
PHPの日付や時刻の取り扱い
PHPでは、日時はタイムスタンプと呼ばれる1970年1月1日 午前0時0分0秒からの経過秒数で表します。そのままでは人間には理解できないので、理解できる文字列に変換する必要が出てきます。以降でそのタイムスタンプと文字列の相互変換について説明します。
日付や時刻から文字列への変換
string date(表示形式 [, タイムスタンプ])
文字列への変換はdate関数によって変換することができます。タイムスタンプは省略可能で、省略した場合は現在時刻が使われます。
表示形式
表示形式としては、ある特定の文字に意味を持たせていてそれを指定します。
下記が表示形式の一覧になります。
- 年
- Y : 4桁
- y : 2桁
- 月
- m : 2桁の数字。1桁の場合は0を付ける
- n : 月の数字。1桁の場合は0を付けない。
- F : 英語表示
- M : 英語の略字(3文字)
- 日
- d : 2桁の数字。1桁の場合は0を付ける
- j : 日付の数字。1桁の場合は0を付けない。
- 曜日
- l (Lの小文字) : 英語表示
- D : 英語の略字(3文字)
- 時
- g : 12時間表記
- G : 24時間表記
- h : 2桁の12時間表記。1桁の場合は0を付ける
- H : 2桁の24時間表記。1桁の場合は0を付ける
- 午前・午後
- a : am or pm (小文字)
- A : AM or PM (大文字)
- 分
- i : 2桁の分の数字
- 秒
- s : 2桁の秒の数字
その他
その他の詳細なフォーマットについてはこちらのPHPマニュアルのdate()関数を参考にしてみてください。
文字列から時刻への変換
int strtotime ( 時間の文字列 [, タイムスタンプ ] )
時間の文字列は、特定のフォーマットで記述されたものだけをただしく取り込むことができます。下記の例では、いずれの文字列も”2018/02/01″の日時としてして取り込まれます。年の桁数か4桁か2桁と区切り文字で、年月日の取り込まれる位置が変わるので注意が必要です。
正しく読み込まれない場合は、文字列がどのような形式か確認してみてください。
年月日の取り込みフォーマット
よく使うフォーマット
日本は年月日という順が一般的なので、次のようなフォーマットが良く使われると思います。
$ref=strtotime(“2018-02-01”);
$ref=strtotime(“2018/02/01”);
$ref=strtotime(“20180201”);
あまり使わないフォーマット
アメリカやイギリスでは、日月年や月日年などの順で使われることがあるので次のようなフォーマットでも変換可能です。ちょっとわかりずらいですね。
$ref=strtotime(“18-02-01”);
$ref=strtotime(“01-02-2018”);
$ref=strtotime(“01.02.2018”);
$ref=strtotime(“02/01/18”);
$ref=strtotime(“02/01/2018”);
時間のフォーマット
時間は時分秒の順に記載してあればOKです。区切り文字は、コロン(:)、ドット(.)、無しで受け付けられます。時間が12時間表記の時は最後にam/pmを記載すればOKです。
下記の例であれば、一番下以外は”2018/02/01 10:24:34″と取り込まれます。一番下は”2018/02/01 22:24:34″となります。
24時間表記
$ref=strtotime(“2018-02-01 10:24:34”);
$ref=strtotime(“2018-02-01 10.24.34”);
$ref=strtotime(“2018-02-01 102434”);
12時間表記
$ref=strtotime(“2018-02-01 10:24:34 am”);
$ref=strtotime(“2018-02-01 10:24:34 pm”);
その他
その他の詳細なフォーマットについてはこちらもPHPマニュアルを参考にしてみてください。ちょっとややこしいですけど。
使用例
例として、2018/2/1の日付を取り込み、表記を変えて表示させてみます。
$ref=strtotime("2018-02-01 12:24:34"); echo "日付のフォーマット</br>"; echo "日本式 : ".date("Y/m/d H:i:s",$ref); echo "</br>"; echo "アメリカ式 : ".date("M. j, Y",$ref); echo "</br>"; echo "イギリス : ".date("j M Y",$ref);
実行させると下記のように表示されます。
日付のフォーマット 日本式 : 2018/02/01 12:24:34 アメリカ式 : Feb. 1, 2018 イギリス : 1 Feb 2018
まとめ
表記の方法が世界の国々で異なるので、読み込める形式がいろいろありますが、実際に運用する場合は、表記方法を限定した方が良いと思います。
私は個人的に使っているのは、”2018-02-01 12:24:34″の様な、ハイフン(-)区切りの24時間表記です。一般的に使う”/”は扱いがめんどくさい場合があるんですよね~。
コメント
[…] PHPで日付や時刻の文字列へ変換と文字列から日付や時刻への変更 […]
[…] PHPで日付や時刻の文字列へ変換と文字列から日付や時刻への変更 […]