PHP

PHPの日付書式まとめ

なんか書き始めてから、ほとんどPHPの話題に触れていない。間にちょいちょい違う言語を挟んではいるものの、本業ではPHP書いてるんですがね・・・

だが、長いこと書いてる割に、なぜか日付(時刻)の書式とか、すぐ忘れる。
だって使うのは大抵

date('Y-m-d H:i:s');

なんですよ。9割方これで済むといっても過言ではない。(言い過ぎ)
たまーに、「2018/02/04」の0いらねって言われて、あれ?ってなる。
そんな、たまに使うけど忘れがちな書式とか、まとめておこうと思います。

前提条件

  • MacOS High Sierra 10.13.3
  • PHP7.1.7

今回は書式の確認だけなので、Docker環境は使いません。
(1個前のvim起動しない件は、これやりたかっただけなんですよ・・・)

日付の書式

以下、今日が2018/2/4の場合です。

2018-02-04

さっきも書いたけど

date('Y-m-d');

「/」で区切りたかったらY/m/dにすればいいだけのお話。
「-」か「/」か「.」のどれかを区切り文字にする・・・くらいのバリエーションですかね。

2018年2月4日

0いらねって言われるのは、たいてい日本語表記の時ですね。

date('Y年n月j日');

nは、なんとなく覚えてるんですが、jを覚えてない・・・なぜだ。

18-02-04

最近あんまりお見かけしないが、年を2桁で出すときが、ごく稀に。

date('y-m-d');

これは割と覚えてるな。

平成30年2月4日

ほんとこれ滅多にないし、前回使ったのは、数年前、提出用の印刷物を元号で・・・みたいなお仕事でしたか。
もちろんPHPには書式として存在しないので、自分で工夫する必要があります。
(日本でもユーザー多いんだし、設定してるtimezoneでよろしくやってくれるのが公式に現れてもいい頃だと思うわけですよ・・・)

曜日の書式

曜日もなー。日本語圏に優しくないよなー。

Sun

date('D');

正直、あんまり使わない。なんかカッコつけたページに出す時くらい

7または0

いきなり数字きてなんのこった?と思うけど、英語圏以外の人は、きっとこの数字使いまくりだと思うのですよ。

月曜日=1,火曜日=2・・・日曜日=7

date('N');

日曜日=0,月曜日=1・・・土曜日=6

date('w');

これね、何が困るって日曜日しか違いがないので、ちゃんと動いてたのに、誰か休日出勤したら変だった・・・みたいなことが起きかねないところですかね?
テストでサーバー日付いじったりするところまでやる会社は良いのですが、うっかりミスしないように、毎回マニュアル見て確認しちゃうやつなんですよ・・・

(日)、日曜日

これもあれだ。元号と同じで公式で存在しないのです。公式がそろそろ・・・(以下略)

時間の書式

時刻は24時間と12時間表記2パターンあるので、割と忘れがちな12時間パターンを併記

09:07:03

これは日付とセットで出すときによく使うやつです

24時間表記の場合

date('H:i:s');

12時間表記の場合

date('h:i:s');

9:07:03

時間の頭に0がつかないパターン。

24時間表記の場合

date('G:i:s');

12時間表記の場合

date('g:i:s');

Gってなんの略・・・な感じで全然覚えられないやつです。

9時7分3秒

日本ではアリなこの表記。海外ではないんですかね?分と秒に0をつけないことって・・・
まぁ、幸いなことに、最近はあまりこういうご要望は頂かないので0つけて出してますが。

date('G') . '時' . (int)date('i') . '分' . (int)date('s') . '秒';

無理やりすぎる・・・

sprintf('%d時%d分%d秒', date('H'), date('i'), date('s'));

どっちにしても美しくないな・・・w
色々書きようはあるけど、すっきりしないどころか何だかわからなくなるので、あまり奇抜なアイデアはやめておくのが無難なところですかね。

番外編

RSSのpubDate

Sat, 10 Feb 2018 19:55:00 +0900

こういうやつ、入ってますよね?

date('r');

こんなやつあるのに、和暦は・・・(以下略)

RSS自体が色々決まり事があるので、よその人に迷惑かけないように仕様を確認しましょう。
その昔、他社のRSSを読み込んでDBに入れるお仕事で、文法エラーたっぷりのRSSを配信されて、悲しいエラー通知を受け取る側だったのでw

和暦は1行ですっきり出すことができない&だいぶ長くなったので、また今度。