人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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 フォーマット 不思議 名称 定義
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kent013
●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にいくらか情報があります.


参考

◎質問者からの返答

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

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

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


2 ● dungeon-master
●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)表記してタイムゾーンなし。

◎質問者からの返答

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

ありがとうございます。

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


3 ● itss
●0ポイント

Hi,

日式日付フォーマット

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ