日時表記のフォーマットの名前とperl/PHP/javascriptでのつくりかた

毎回毎回日時を出力する時にどうすればいいのか思い出せなくて毎回毎回調べていてばかみたいなのできちんとまとめてみます。

日時のフォーマット名

まず、よく使われる日時表記の名前を把握することが大切です。名前がわからないと検索のしようがありません。

ISO8601

ISO8601はたぶん一番なじみが深いものだと思います。 MySQLのdatetime型の表記 2008-08-06 19:38:56 はISO8601です。

ISO8601は日時を表すだけでなく、年だけや時刻だけを表せるほか、期間を表すことができます。また、多様な書き方を許していて、間にある記号を省略して20080806 193856というのもISO8601として正しい日時になります。英語のwikipediaのISO 8601が詳しいです。

W3CDTF

W3CDTFはatomのフィードで使われている 2003-12-13T18:30:02Z みたいなやつです。 この書式は実はISO8601に含まれているのですが(なのでISO8601がパースできるパーサならW3CDTFもパースできます)、仕様を決める時に日付の書式をISO8601にすると、ISO8601が多様な書式を許していることで実装が煩雑になってしまいます。それを避けるために導入されたものだそうです。

RFC2822/822

RFC2822/822は日本人には読みにくい Mon, 23 Apr 2007 11:10:53 +0900 という形式のものです。個人的には、曜日はいらないだろ、と毎回思っています。メールやHTTPのヘッダ、RSS2.0の日時表記に使われています。

ctime

ctimeはPOSIXで規定されているasctimeというCの関数が出力するフォーマットです。こんな Thu Feb 3 17:03:55 GMT 1994 かんじでRFC2822/822と似ていますが、月の名前が月の日付よりも先にきているものです。

ブラウザ上で何かする時にはjavascriptのDateオブジェクトのtoString()の結果くらいでしかお目にかかることはありませんが、ブラウザ以外のC言語で実装されているソフトウェアではよく使われています。身近なところではapacheのエラーログの日付表記がctimeになっています。

各言語での作り方

以下は自分が普段よく使うperl, PHP, javascriptでどうやったら各日付のフォーマットを作れるかのメモです。もっといい方法、ほかの言語ではどう書くか、など教えていただけたらうれしいです。

ISO8601
(2008-08-08 01:11:05)
W3CDTF RFC2822 ctime
perl $_ = DateTime->now->datetime; s/T/ /; DateTime::Format::W3CDTF-> format_datetime( DateTime->now ) DateTime::Format::Mail-> format_datetime( DateTime->now )
PHP preg_replace('/T|[\+Z].+/', ' ', date('c')) date('c') date('r')
javascript ISO8601DateUtils.jsm(extensionのみ)
ISO8601DateUtils.jsm(extensionのみ)
(new Date).toString()

テーブルはGenerate HTML Tables Clean and Fastでつくりました。地味ですが、タブで隣のセルに移動できたり、地味に便利でした。

参考

  • 日付の表記に関するノート
  • ISO 8601 - Wikipedia, the free encyclopedia
  • RSS 2.0 Specification (RSS 2.0 at Harvard Law)
  • NOTE-datetime
  • RFC4287 The Atom Syndication Format
  • CPAN DateTime::Formatまとめメモ « ku

tags

  • PHP
  • javascript
  • perl
  • 「日時表記のフォーマットの名前とperl/PHP/javascriptでのつくりかた」のはてなブックマーク数
  • 「日時表記のフォーマットの名前とperl/PHP/javascriptでのつくりかた」deliciousブックマーク数
  • 「日時表記のフォーマットの名前とperl/PHP/javascriptでのつくりかた」をはてなブックマークに追加
  • save "日時表記のフォーマットの名前とperl/PHP/javascriptでのつくりかた" to del.icio.us
  • 「日時表記のフォーマットの名前とperl/PHP/javascriptでのつくりかた」をリアルタイムブログ検索
  • permalink
  • 大切じゃないパスワードを記録するためのiPhone用ブックマークレットとclient-side storageの可能性
  • Firebugクックブック #1

comments

TypeKey Enabled
スタイル用のHTMLタグが使えます。
*required

trackbacks

トラックバック元エントリにこのエントリへのリンクがない場合はトラックバックを受け付けません。

http://labs.gmo.jp/mt/mt-tb.cgi/227
©2010 Kentaro Kumagai, GMO Internet Labs., GMO Internet, inc.
bits and bytes
2008 .08. 08 19:00

tagcloud

  • API3
  • C/C++3
  • E4X1
  • FUSE2
  • Firefox31
  • HTML4
  • IE1
  • MySQL1
  • OSX4
  • Opera2
  • PHP5
  • Safari1
  • UI2
  • WebKit1
  • XML2
  • XPCOM4
  • XPath5
  • apache2
  • binary2
  • book1
  • data14
  • debug5
  • design2
  • experiments4
  • extension14
  • geo1
  • google gears2
  • google maps API1
  • greasemonkey4
  • httpd5
  • javascript26
  • linux1
  • logging2
  • mobile4
  • perl7
  • tips6
  • tool11
  • vim2
  • visualization4
  • widget1
  • wii3
  • windows7
  • サービス8
  • 和訳1

Archives

  • 2008.08 (3)
  • 2008.07 (4)
  • 2008.06 (4)
  • 2008.05 (5)
  • 2008.04 (4)
  • 2008.03 (4)
  • 2008.02 (6)
  • 2008.01 (3)
  • 2007.12 (4)
  • 2007.11 (5)
  • 2007.10 (4)
  • 2007.09 (4)
  • 2007.08 (4)
  • 2007.07 (8)
  • 2007.06 (7)
  • 2007.05 (4)
  • 2007.04 (5)
  • 2007.03 (6)
  • 2007.02 (4)
  • 2007.01 (6)

about

  • bits and bytesのXML
  • 「bits and bytes」のCreative Commons
  • Powered by Movable Type
  • イベントと地図 - モグ
  • Use ecto to blog!
  • bits and bytesのはてなブックマーク数
  • bits and bytesをMy Yahoo!に追加
  • Subscribe with Bloglines