[7] HTML ではいくつかの属性などで日時を表す文字列が用いられています。 そのほとんどは ISO 8601の日付形式に近いものですが、歴史的な理由により異なる書式を採用している文脈もあります。
[93] HTML で定義されている日付形式には、次のものがあります。
[149] マイクロデータの日時形式、OGPの日時形式も参照してください。
[20] 時刻は、特定の時刻を表し、 時、分、秒、秒の小数部から成ります。時間帯の情報は持ちません。 HTML5
[104] 妥当な正規化済み地方日時文字列や妥当な正規化済みUTC大域日時文字列では、 妥当な時刻文字列の最短形を使うことになっています。これはすなわち、
[63] valueAsNumber
DOM属性では、
1970年1月1日の0時0分 (UTC) からのミリ秒の数によって表現されます。
HTML5
[64] valueAsDate
DOM属性では、
1970年1月1日における時刻 (UTC) とした Date
物体によって表現されます。
HTML5
[54] type
が time
の input
要素で使われます。
[131] 妥当な大域日時文字列や妥当な地方日時文字列や妥当な日付文字列と省略可能な時刻の定義で用いられています。
[16] 日付は、先発グレゴリオ暦上の日付を表します。 日付には年、月、日が含まれますが、時間帯は含まれません。 HTML5
[70] valueAsNumber
DOM属性では、
1970年1月1日の0時0分 (UTC) からその日の真夜中
(UTC) までのミリ秒の数によって表現されます。
HTML5
[71] valueAsDate
DOM属性では、
その日の真夜中 (UTC) を表す Date
物体によって表現されます。
HTML5
[53] type
が date
の input
要素で使われます。
[128] 妥当な大域日時文字列、妥当な地方日時文字列、妥当な日付文字列と省略可能な時刻の一部として使われます。
[45] JavaScript では、 Date
オブジェクトの
toISODateString
メソッドにより取得できます。
(厳密には定義が異なりますが、実用上は無視できる程度の違いです。)
[25] 地方日時は、 先発グレゴリオ暦上の日時を表します。 年、月、日、時、分、秒、秒の小数部から成ります。 時間帯の情報は含みません。 HTML5
[26] 妥当な地方日時文字列は、 次のような文字列です >>8。
[102] 妥当な正規化済み地方日時文字列は、
>>26 のうち、 >>98 が T
であり、 >>99 が最短形のものです >>8。
[73] valueAsNumber
DOM属性では、
1970年1月1日の0時0分からのミリ秒の数によって表現されます。
HTML5
[74] valueAsDate
DOM属性での表現は定義されていません。
HTML5
[75] 地方日時を入力する input
要素の step
属性では、
時間が秒単位の数によって表現されます。
HTML5
[55] type
が datetime-local
の input
要素で使われます。
[146] ISO 8601の日付形式 (>>25)に、類似形式との比較があります。
[31] 大域日時は、 先発グレゴリオ暦上の日時を表します。 年、月、日、時、分、秒、秒の小数部、時間帯から成ります。 HTML5
[32] 妥当な大域日時文字列は、次のような文字列です >>8。
[121] かつて規定されていた妥当な正規化済みUTC強制大域日時文字列 (>>92 で削除) とは、 次のような文字列です >>8。
[76] valueAsNumber
DOM属性では、
1970年1月1日の0時0分 (UTC) からのミリ秒の数によって表現されます。
HTML5
[77] valueAsDate
DOM属性では、
UTC におけるその時刻を表す Date
物体によって表現されます。
HTML5
[78] 大域日時を入力する input
要素の step
属性では、
時間が秒単位の数によって表現されます。
HTML5
[56] type
が datetime
の input
要素で使われます。
[57] ins
要素や del
要素の
datetime
属性で使われます。
[139] vCard マイクロデータの rev
の値で使われます。
[138] vEvent マイクロデータの created
,
last-modified
の値で使われます。
[137] 妥当な日付文字列と省略可能な時刻やHTMLの時刻の範囲の形式で使われます。
[147] ISO 8601の日付形式 (>>25)に、類似形式との比較があります。
[44] JavaScript では、 Date
オブジェクトの
toISOString
メソッドにより取得できます。
(厳密には定義が異なりますが、実用上は無視できる程度の違いです。)
ローマ皇帝ネロの誕生日 (ユリウス暦37年12月15日のグレゴリオ暦換算)
の真夜中を表します。なお、
37-12-13
は年が4桁に満たないので、
妥当な大域日時文字列ではありません。
[35] 1979-10-14T12:00:00.001-04:00
HTML5
北米東海岸の夏時刻中の1979年10月14日の正午から1ミリ秒後を表します。
[12] HTML はグレゴリオ暦 (だけ) を採用しています。グレゴリオ暦が採用される以前の日付も表すことができますが、 グレゴリオ暦を過去に延長した場合に相当する日付を使って表されます (先発グレゴリオ暦 (proleptic グレゴリオ暦) などと呼ばれます)。
[37] 現在の HTML では、年の桁数が4桁以上で無制限とされており、1万年問題は存在しません。
[38] 過去の版の HTML5 案や Web Forms 2.0 や HTML4 では年は4桁に制限されていました。
[142] sortable
な table
で用いられる照合順序について、
次のように定められています。
[143] 月、日付、週は、その最初の瞬間を表す地方日時と等価とします >>141。
[144] 型の違う値同士は、次の順序とします >>141。
[145] 同じ型同士の順序は、その大小によって決めます。
[60] 時刻でなく時間を表すものとしては、
http-equiv
属性が Refresh
の場合の content
属性値の書式 (秒数を指定) があります。
以前の HTML5 案には audio
要素や video
要素に媒体中の時間的位置を表す内容属性がありましたが、
既に削除されています。
秒数を返す DOM属性は削除されずに残っています。
[46] HTML の日付形式は、 HTML 4.0 で datetime
属性が導入されたことではじめて規定され、後に Web Forms 2.0 と HTML5
により拡張され現在に至っています。
%Datetime;
型 (HTML4/XHTML1)[1] HTML 4 の %Datetime;
型は、
W3C-DTF の2番目に長い (秒未満までは表現できない)
形式です。
[6] 仕様書:
%Datetime
(HTML 4, XHTML 1.0)Datetime
(XHTML m12n)datetime(HTML 4)
CDATA
CDATA
[2] 大文字・小文字は区別されます。
T
と Z
が使われ得ますが、
いずれも大文字でなければなりません。
[3] 時・分・秒が得られない時は、 00
としてもよいことになっています。
閏秒の 60秒は W3C‐DTF では表現できません。
[40] 現在 HTML で定義されている日付形式のほとんどは、 Web Forms 2.0 で日時関係のフォーム制御子を実現するために導入されました。
[41] HTML5 では HTML4 から引き継いだ ins
要素や
del
要素の datetime
属性のための日付形式
(現在の大域日時) に加え、
time
要素のための日付や時刻の書式が導入されました。
[42] その後 Web Forms 2.0 が HTML5 に統合された際に、これらの定義は整理され、 本稿で紹介したような形になりました。この時、1万年問題への対応など細かい点が改められています。
[29] フォーム制御子用の日時の値は、 WF2 で当初から規定されていました。
<input type>
ごとに (現在とほぼ同じ) 多数の形式が用意されていました。
最初は、完全に ISO 8601 を参照していました >>30。
後の版では、 ISO 8601 を参照しつつ、構文が明示的に定義されていた一方で、
構文解析の方法はまだ明確にされていませんでした >>28。
[13] ins
要素と del
要素は、
版 (現存せず) WA1 で追加されました。
datetime
属性もこのときに追加されました。
[15] この当時は、属性値の適合性は、 妥当な大域日時文字列に相当するものが直接規定されていました。 一方で構文解析は ISO 8601 を参照する形になっており、 ISO 8601 に従い解釈できない場合は無視することとされていました。 >>14
[82] Issues relating to the syntax of dates and times (Ian Hickson <ian@...> 著, 版) http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/16763
[83] (X)HTML5 Tracking ( 版) http://html5.org/tools/web-apps-tracker?from=2380&to=2381
[84] (X)HTML5 Tracking ( 版) http://html5.org/tools/web-apps-tracker?from=2381&to=2382
[85] (X)HTML5 Tracking ( 版) http://html5.org/tools/web-apps-tracker?from=3717&to=3718
[87] (X)HTML5 Tracking ( 版) http://html5.org/tools/web-apps-tracker?from=4317&to=4318
[88] Web Applications 1.0 r6235 Define the serialisation requirments for type=datetime. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=6234&to=6235
[89] Basic Data Types and Interfaces – SVG 1.1 (Second Edition) ( ( 版)) http://www.w3.org/TR/2011/REC-SVG11-20110816/types.html#DataTypeTime
[90] Web Applications 1.0 r6892 Limit the number of digits in the fraction part of a seconds time component to 3, since more than that and you lose precision when converting to milliseconds, e.g. for use with Date objects in the API. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=6891&to=6892
[91] [whatwg] Time Parsing ( 版) http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-January/034344.html
[92] Web Applications 1.0 r6893 Define how to convert a time to a Date object if it's not a round number of milliseconds. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=6892&to=6893
[9] Sort out the handling of seconds in "parse a time component" · whatwg/html@06059a8 ( 版) https://github.com/whatwg/html/commit/06059a864e93441cb85d10d719cf306985aa1c48
[43] RFC 3339 デマについては RFC 3339の日時形式を参照。
[47] W3C の HTML 5.2 などでは年の値域がおかしい問題があるようですが、 誰も W3C の HTML 5.x は相手にしていないので、 無視して大丈夫です。 (問題があることを知っている人すらほとんどいない。)
[151] 例えば文章の一部としての日付の記述は従来各自然言語や組織等で慣習的に用いられてきた表記方法をそのまま使って構いません。 また JavaScript での処理のために
data-*
属性に設定する場合は Unix time など処理しやすい形式でも構いません。