ようこそゲスト さん ユーザー登録 ログイン

PHPを利用していて、
date('Y-m-d H:i:s')
という表記をよく使います。

上記の出力例:
 2008-04-01 16:50:07

質問:このフォーマットに名称は有りますか?

補足:PHPには日付出力フォーマットの定数が用意されています。
たとえば、DATE_RSSやDATE_W3Cです。

http://jp2.php.net/manual/ja/ref.datetime.php

なぜ、Y-m-d H:i:sが定義されていないのか不思議に思いました。
PHPを利用していて、 date('Y-m-d H:i:s') という表記をよく使います。 上記の出力例:  2008-04-01 16:50:07 質問:このフォーマットに名称は有りますか? 補足:PHPには.. を含むブックマークはてなブックマーク - PHPを利用していて、 date('Y-m-d H:i:s') という表記をよく使います。 上記の出力例:  2008-04-01 16:50:07 質問:このフォーマットに名称は有りますか? 補足:PHPには.. - 人力検索はてな

  • matsubobo あなたも質問に答えられます! ウォッチリストに追加
  • 状態:終了 いるか
  • 回答数:3 / 5件
  • 回答ポイント:92ポイント
  • 登録:2008-04-01 16:57:32
  • 終了:2008-04-02 14:44:35
  • カテゴリー:コンピュータコンピュータ インターネットインターネット

1 回答者:kent013 2008-04-01 23:39:08 満足! 47ポイント

matsuboboさんが提示していらっしゃる

PHP/リファレンス/date - ipxw.com

のように定義がいくつもあるのは,プロトコルやアプリケーションの仕様によって様々に定義されてきた歴史があるからです.


それらのプロトコルやアプリケーションは,インターネットの性格上,世界共通で使える日付フォーマットを必要としています.ですから必ず,「タイムゾーン表記」が必要になってきます.

見ていただければわかりますが,名前の付いてるフォーマットはすべてタイムゾーンが定義されています.


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

で取得できるYYYY-MM-DD hh:mm:ss形式の日付にはタイムゾーンが含まれておらず,データ形式ではなくて「一般的な表示形式」ですから名前付けはされていません.


ISO8601を含むRFC 3339 (rfc3339) - Date and Time on the Internet: Timestampsを参考にすれば

date-fullyear   = 4DIGIT
date-month      = 2DIGIT  ; 01-12
date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                             ; month/year
full-date       = date-fullyear "-" date-month "-" date-mday

と定義されていますので,YYYY-MM-DDは「RFC3339でいうところのfull-date」です.

また,

time-hour       = 2DIGIT  ; 00-23
time-minute     = 2DIGIT  ; 00-59
time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap second
                             ; rules
time-secfrac    = "." 1*DIGIT

partial-time    = time-hour ":" time-minute ":" time-second
                  [time-secfrac]

とありますので,hh:mm:ssは「RFC3339でいうところのpartial-time」です.

YYYY-MM-DD hh:mm:ss形式は,RDF3339でいうところの「full-date partial-time」でしょうか.


データ形式ではなくて,日本語における~,英語における~という範疇の形式名はわかりませんが,日付・時刻の表記 | 国立国会図書館-National Diet Libraryにいくらか情報があります.


参考

質問者:matsubobo 2008-04-02 14:42:21

わかりやすい説明ありがとうございます!

・PHPの時間に関する定数にはタイムゾーンが全て付いていることは新たな発見になりました。

・date('Y-m-d H:i:s')の返り値をMySQLへ入れていました。アプリケーションはJSTに設定されたサーバで提供しているためタイムゾーンの影響は受けませんが、タイムゾーンを考慮したフォーマットをアプリケーション内でも利用すべきですね。日本人にとって見やすい DATE_ATOM(DATE_W3C)を利用しようと思います。

2 回答者:dungeon-master 2008-04-01 23:56:49 満足! 45ポイント

>質問:このフォーマットに名称は有りますか?

通称、YYYY-MM-DD hh:mm:ss形式(そのまんま…)ですね。

ポピュラーすぎて正式名称がない…

YYYY-MM-DD-hh:mm:ss なら JIS X0301第二形式ともいえますが。

いま、あえて言うなら日時分離型ISO8601表記、かなー。(勝手に考えた)


PHPだと、PearライブラリのDATEパッケージにある getDate(DATE_FORMAT_ISO)が

同様の結果を返します。

http://codezine.jp/a/article/aid/1816.aspx?p=2

DATE_FORMAT_ISOという識別子が示すように、一応「日付」と「時刻」自体はISO形式。

DATE_ISO8601はTを挟んで連結(combined)してタイムゾーン付きですが、

こちらは日付と時刻を分離(separated)表記してタイムゾーンなし。

質問者:matsubobo 2008-04-02 14:22:45

PEARのDateには定義があるんですね。

ありがとうございます。

#補足ですが、1年前にアプリケーションの実行トレースをしたら、PEARのDateがすごく重かったです。。。

3 回答者:itss 2008-04-02 07:51:32 0ポイント

Hi,

日式日付フォーマット

おとなり質問

この質問・回答へのトラックバックこの質問・回答へのトラックバック