[7] [[HTML]] ではいくつかの[[属性]]などで[[日時]]を表す文字列が用いられています。
そのほとんどは [[ISO 8601の日付形式]]に近いものですが、歴史的な理由により異なる書式を採用している文脈もあります。

[93] [[HTML]] で定義されている[[日付形式]]には、次のものがあります。
[FIG(list short)[
- [[大域日時]] (>>31)
- [[地方日時]] (>>25)
- [CODE(DOMa)@en[[[lastModified]]]]
- [[日付]] (>>16)
- [[年]]
- [[月][HTMLの月]]
- [[月日]]
- [[時刻]] (>>20)
- [[日付文字列と省略可能な時刻]]
- [[日付か時刻]]
- [[週]]
- [[HTMLの時間帯表記]] (2種類)
- [[HTMLの時間形式]] (3種類)
- [[HTMLの時刻の範囲の形式]] (2種類)
- [CODE[[[RECUR]]]]
]FIG]

[149] [[マイクロデータの日時形式]]、[[OGPの日時形式]]も参照してください。

;; [150] [[HTML]] ではこれらの[[日時形式]]が定義されていますが、
これはあくまでそれぞれの文脈で用いられるべき構文に過ぎません。
通常の[[要素]]の[[内容]]や自由文が認められる[[属性]]などで人間向け、
あるいは[[著者]]による[[スクリプト]]のために記述される[[日時]]は、
任意の構文で記述して構いません。
[EG[
[151] 例えば文章の一部としての日付の記述は従来各[[自然言語]]や組織等で慣習的に用いられてきた表記方法をそのまま使って構いません。
また [[JavaScript]] での処理のために [CODE(HTMLa)@en[[[data-*]]]] [[属性]]に設定する場合は
[[Unix time]] など処理しやすい形式でも構いません。
]EG]

* 仕様書

[REFS[
- [8] '''<http://www.whatwg.org/specs/web-apps/current-work/#dates-and-times>'''
- [141] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-05-06 22:16:25 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#comparing-two-row-groups-using-the-th-element>
]REFS]

;; [51] 本項では [[HTML5]] の定義に基づき説明しますが、
構文の定義や算法の定義は必ずしも仕様書の通りではありません。仕様書の規定と等価な別な表現で説明していることがあります。

* 定義

[94] [[HTML]] は[[日付形式]]の定義のために、次のような概念も定義しています。
- [[先発グレゴリオ暦]]・[[先発グレゴリオ日]]
- [[日の数]]

* 時刻

[20] [DFN[[RUBYB[時刻]@en[time]]]]は、特定の[[時刻]]を表し、
[[時]]、[[分]]、[[秒]]、[[秒の小数部]]から成ります。[[時間帯]]の情報は持ちません。
[SRC@en[[[HTML5]]]]

** 構文定義

-[21] [CODE(ABNF)[[DFN[[RUBYB[妥当な時刻文字列]@en[valid time string]]]] := 2[[ASCII数字]] ":" 2[[ASCII数字]] [":" 2[[ASCII数字]] ["." 1*[[ASCII数字]] ] ] ]]
[SRC@en[[[HTML5]]]]
-- 1つ目の[[数字]]列は、[[時]]を表す 0〜23 の[[数]]
-- 2つ目の[[数字]]列は、[[分]]を表す 0〜59 の[[数]]
-- 3つ目の[[数字]]列は、[[秒]]の[[整数部]]を表す 0〜59 の[[数]] ([[秒]]が 0 の時だけ省略可能)
-- 4つ目の[[数字]]列は、[[秒]]の[[小数部]]を表す値 ([[秒]]が[[整数]]の時だけ省略可能)

[FIG(railroad)[
= 2数字
= [CODE[[[:]]]]
= 2数字
= ?
== [CODE[[[:]]]]
== 2数字
== ?
=== [CODE[[[.]]]]
=== +
==== 数字
]FIG]

** 最短形

[104] [[妥当な正規化済み地方日時文字列]]や[[妥当な正規化済みUTC大域日時文字列]]では、
[[妥当な時刻文字列]]の最短形を使うことになっています。これはすなわち、

- [105] [[秒の小数部]]は、小さい方の桁が 0 なら、それを省略します。
- [107] [[秒の小数部]]が [N[0]] なら、 [CODE[.][FULL STOP]] と[[小数部][秒の小数部]]を省略します。
- [106] [[秒]]が[[整数部]]も[[小数部][秒の小数部]]も [N[0]] なら、 [CODE[[[:]]]] と[[秒]]を省略します。

;; [148] [CODE(HTML)[[[<input type=time>]]]] で単独で[[妥当な時刻文字列]]として使われる場合には、
最短形であることは要求されていないようです。

** 構文解析

[23] [DFN[[RUBYB[時刻文字列の構文解析]@en[parse a time string]]]]
[SRC@en[[[HTML5]]]]:
= [[時刻部品の構文解析]]を行い、それが何も返さなかったら、何も返さないで終える
= [[文字列]]がそれで終わっていなければ、何も返さないで終える
= (1) で得られた[[時]]と[[分]]と[[秒]]を返す

[24] [DFN[[RUBYB[時刻部品の構文解析][parse a time component]]]]
[SRC@en[[[HTML5]]]]:
= [[文字列]]が[[正規表現]] [CODE(regexp)[([[数字]]{2}):([[数字]]{2})(?::([[数字]]{2}(?:\.[[数字]]+)?))?]] 
に[[一致]]しない場合、何も返さず終わる
= $1 を[[十進数]]として解釈したものを[[時]]とする
= $2 を[[十進数]]として解釈したものを[[分]]とする
= $3 を[[十進数]]として解釈したものを[[秒]]とする ($3 がない場合、 0 とする)
= [[時]]が 0〜23 でない場合、何も返さない
= [[分]]が 0〜59 でない場合、何も返さない
= [[秒]]が 60 [[未満]]の[[正数]]でない場合、何も返さない
= [[時]]と[[分]]と[[秒]]を返す

** 数値表現

[63] [CODE(DOMa)@en[[[valueAsNumber]]]] [[DOM属性]]では、
[[1970年1月1日]]の[[0時0分]] ([[UTC]]) からの[[ミリ秒]]の数によって表現されます。
[SRC@en[[[HTML5]]]]

[64] [CODE(DOMa)@en[[[valueAsDate]]]] [[DOM属性]]では、
[[1970年1月1日]]における[[時刻]] ([[UTC]]) とした [CODE(JS)@en[[[Date]]]] [[物体]]によって表現されます。
[SRC@en[[[HTML5]]]]

[65] [[時刻]]を入力する [CODE(HTMLe)@en[[[input]]]]
[[要素]]の [CODE(HTMLa)@en[[[step]]]] [[属性]]では、
[[時間]]が[[秒]]単位の[[数]]によって表現されます。
[SRC@en[[[HTML5]]]]

** 文脈

[54] [CODE(HTMLa)@en[[[type]]]] が [CODE(HTML)@en[[[time]]]] の [CODE(HTMLe)@en[[[input]]]]
[[要素]]で使われます。

[130] [CODE(HTMLe)@en[[[time]]]] [[要素]]で使われます。

[131] [[妥当な大域日時文字列]]や[[妥当な地方日時文字列]]や[[妥当な日付文字列と省略可能な時刻]]の定義で用いられています。

[132] [[時間帯]]で使われる時分の表記と似ていますが、異なるものとして定義されています。

* 日付

[16] [DFN[[RUBYB[日付]@en[date]]]]は、[[先発グレゴリオ暦]]上の[[日付]]を表します。
[[日付]]には[[年]]、[[月]]、[[日]]が含まれますが、[[時間帯]]は含まれません。
[SRC@en[[[HTML5]]]]

** 構文

-[17] [CODE(ABNF)@en[[DFN[[RUBYB[妥当な日付文字列]@en[valid date string]]]] := [[妥当な月文字列]] "-" 2[[数字]]]]
[SRC@en[[[HTML5]]]]
-- 最後の[[数字]]列は、[[年]]と[[月]]に基づく[[日]]の数 (>>9) [[以下]]の[[正数]]で、[[日]]を表す

[FIG(railroad)[
= 4以上の数字
= [CODE[[[-]]]]
= 2数字
= [CODE[[[-]]]]
= 2数字
]FIG]

** 構文解析

[18] [DFN[[RUBYB[日付文字列の構文解析]@en[parse a date string]]]]
[SRC@en[[[HTML5]]]]:
= [[日付部品の構文解析]]を行い、それが何も返さなかったら、何も返さないで終える
= [[文字列]]がそれで終わっていなければ、何も返さないで終える
= (1) で得られた[[年]]と[[月]]と[[日]]を返す

[19] [DFN[[RUBYB[日付部品の構文解析][parse a date component]]]]
[SRC@en[[[HTML5]]]]:
= [[月部品の構文解析]]により、[[年]]と[[月]]を得る。何も返されなかった場合、何も返さず終わる
= [[文字列]]の続きが[[正規表現]] [CODE(regexp)[-([[数字]]{2})]] に[[一致]]しない場合、何も返さず終わる
= $1 を[[十進数]]として解釈したものを[[日]]とする
= [[日]]が[[年]]と[[月]]に基づく[[日]]の数 (>>9) [[以下]]の[[正数]]でなければ、何も返さず終わる
= [[年]]と[[月]]と[[日]]を返す

** 数値表現

[70] [CODE(DOMa)@en[[[valueAsNumber]]]] [[DOM属性]]では、
[[1970年1月1日]]の[[0時0分]] ([[UTC]]) からその[[日]]の[[真夜中]]
([[UTC]]) までの[[ミリ秒]]の数によって表現されます。
[SRC@en[[[HTML5]]]]

[71] [CODE(DOMa)@en[[[valueAsDate]]]] [[DOM属性]]では、
その[[日]]の[[真夜中]] ([[UTC]]) を表す [CODE(JS)@en[[[Date]]]] [[物体]]によって表現されます。
[SRC@en[[[HTML5]]]]

[72] [[日付]]を入力する [CODE(HTMLe)@en[[[input]]]]
[[要素]]の [CODE(HTMLa)@en[[[step]]]] [[属性]]では、
[[時間]]が[[日]]単位の[[数]]によって表現されます。
[SRC@en[[[HTML5]]]]

** 文脈

[53] [CODE(HTMLa)@en[[[type]]]] が [CODE(HTML)@en[[[date]]]] の [CODE(HTMLe)@en[[[input]]]]
[[要素]]で使われます。

[126] [CODE(HTMLe)@en[[[time]]]] [[要素]]で使われます。

[127] [[autofill]] の定義で使われます。

[128] [[妥当な大域日時文字列]]、[[妥当な地方日時文字列]]、[[妥当な日付文字列と省略可能な時刻]]の一部として使われます。

[129] [[vCard]]、[[vEvent]] の[[マイクロデータ]]で使われます。

** 関連

[45] [[JavaScript]] では、 [CODE(JS)@en[Date]] [[オブジェクト]]の
[CODE(JS)@en[toISODateString]] [[メソッド]]により取得できます。
(厳密には定義が異なりますが、実用上は無視できる程度の違いです。)

* 地方日時

[25] [DFN[[RUBYB[地方日時]@en[local date and time]]]]は、
[[先発グレゴリオ暦]]上の[[日時]]を表します。
[[年]]、[[月]]、[[日]]、[[時]]、[[分]]、[[秒]]、[[秒の小数部]]から成ります。
[[時間帯]]の情報は含みません。
[SRC@em[[[HTML5]]]]

** 構文定義

[26] [DFN[[RUBYB[[[妥当な地方日時文字列]]]@en[valid local date and time string]]]]は、
次のような[[文字列]]です
[SRC[>>8]]。
[FIG(railroad)[
= [97] [[妥当な日時文字列]]
= |
== [98] [CODE[T]]
== [CODE(char)[U+0020]]
= [99] [[妥当な時刻文字列]]
]FIG]

;; [100] 「T」は[[大文字]]でなければなりません。

;; [101] 元は >>98 は「T」だけでしたが、後に緩和されて [CODE(char)[[[U+0020]]]] も認められるようになりました。

[102] [DFN[[RUBYB[[[妥当な正規化済み地方日時文字列]]]@en[valid normalized local date and time string]]]]は、
>>26 のうち、 >>98 が [CODE[[[T]]]] であり、 >>99 が最短形のものです [SRC[>>8]]。

;; [103] [[秒未満]]は可能な限り短くしなければいけませんし、[[秒]]が0なら[[秒]]部分も省略します。

** 構文解析

[27] [DFN[[RUBYB[地方日時文字列の構文解析]@en[parse a local date and time string]]]]は、
次のように行います [SRC[>>8]]。
[FIG[
= [[日付部品の構文解析]]により、[[年]]と[[月]]と[[日]]を得る。何も返されなかった場合、
何も返さず終わる
= [[文字列]]の次の[[文字]]が[[大文字]]の「[CODE(char)[[[T]]]]」か [CODE(char)[[[U+0020]]]] でない場合、
何も返さず終わる
= [[時刻部品の構文解析]]により、[[時]]と[[分]]と[[秒]]を得る。何も返されなかった場合、
何も返さず終わる
= [[文字列]]がそれで終わっていなければ、何も返さず終わる
= [[年]]と[[月]]と[[日]]と[[時]]と[[分]]と[[秒]]を返す
]FIG]

** 数値表現

[73] [CODE(DOMa)@en[[[valueAsNumber]]]] [[DOM属性]]では、
[[1970年1月1日]]の[[0時0分]]からの[[ミリ秒]]の数によって表現されます。
[SRC@en[[[HTML5]]]]

[74] [CODE(DOMa)@en[[[valueAsDate]]]] [[DOM属性]]での表現は定義されていません。
[SRC@en[[[HTML5]]]]

[75] [[地方日時]]を入力する [CODE(HTMLe)@en[[[input]]]]
[[要素]]の [CODE(HTMLa)@en[[[step]]]] [[属性]]では、
[[時間]]が[[秒]]単位の[[数]]によって表現されます。
[SRC@en[[[HTML5]]]]

** 文脈

[55] [CODE(HTMLa)@en[[[type]]]] が [CODE(HTML)@en[[[datetime-local]]]] の [CODE(HTMLe)@en[[[input]]]]
[[要素]]で使われます。

[133] [CODE(HTMLe)@en[[[time]]]] [[要素]]で使われます。

** 関連

[146] [[ISO 8601の日付形式]>>25]に、類似形式との比較があります。

* 大域日時

[31] [DFN[[RUBYB[大域日時]@en[global date and time]]]]は、
[[先発グレゴリオ暦]]上の[[日時]]を表します。
[[年]]、[[月]]、[[日]]、[[時]]、[[分]]、[[秒]]、[[秒の小数部]]、[[時間帯]]から成ります。
[SRC@em[[[HTML5]]]]

** 構文定義

[32] [DFN[[RUBYB[妥当な大域日時文字列]@en[valid global date and time string]]]]は、次のような[[文字列]]です
[SRC[>>8]]。
[FIG[
= [115] [[妥当な日時文字列]]
= [116] [CODE[[[T]]]] か [CODE(char)[[[U+0020]]]]
= [117] [[妥当な時刻文字列]]
= [118] [[妥当な時差文字列]]
]FIG]

;; [119] 「[CODE(char)[[[T]]]]」は[[大文字]]でなければなりません。

;; [120] 以前は >>116 は [CODE[[[T]]]] のみでしたが、緩和されました。

[HISTORY[
[121] かつて規定されていた[DFN[[RUBYB[[[妥当な正規化済みUTC強制大域日時文字列]]]@en[valid normalised forced-UTC global date and time string]]]]
(>>92 で削除) とは、
次のような[[文字列]]です [SRC[>>8]]。
[FIG[
= [122] [[妥当な日時文字列]] ([[UTC]] で表現したもの)
= [123] [CODE[[[T]]]]
= [124] [[妥当な時刻文字列]] ([[UTC]] で表現したもので、最短形)
= [125] [CODE[[[Z]]]]
]FIG]
]HISTORY]

** 構文解析

[33] [DFN[[RUBYB[大域日時文字列の構文解析]@en[parse a global date and time string]]]] [SRC@en[[[HTML5]]]]:
= [[日付部品の構文解析]]により、[[年]]と[[月]]と[[日]]を得る。何も返されなかった場合、
何も返さず終わる
= [[文字列]]の次の[[文字]]が[[大文字]]の「[CODE(char)[[[T]]]]」か [CODE[[[U+0020]]]] でない場合、
何も返さず終わる
= [[時刻部品の構文解析]]により、[[時]]と[[分]]と[[秒]]を得る。何も返されなかった場合、
何も返さず終わる
= [[時差部品の構文解析]]により、[[時間帯]]の[[時]]と[[分]]を得る。何も返されなかった場合、
何も返さず終わる
= [[文字列]]がそれで終わっていなければ、何も返さず終わる
= [[年]]~[[秒]]を、[[時間帯]]の情報を使って [[UTC]] に換算する
= [[年]]と[[月]]と[[日]]と[[時]]と[[分]]と[[秒]]と[[時間帯]]の[[時]]と[[分]]を返す

** 数値表現

[76] [CODE(DOMa)@en[[[valueAsNumber]]]] [[DOM属性]]では、
[[1970年1月1日]]の[[0時0分]] ([[UTC]]) からの[[ミリ秒]]の数によって表現されます。
[SRC@en[[[HTML5]]]]

[77] [CODE(DOMa)@en[[[valueAsDate]]]] [[DOM属性]]では、
[[UTC]] におけるその[[時刻]]を表す [CODE(JS)@en[[[Date]]]] [[物体]]によって表現されます。
[SRC@en[[[HTML5]]]]

[78] [[大域日時]]を入力する [CODE(HTMLe)@en[[[input]]]]
[[要素]]の [CODE(HTMLa)@en[[[step]]]] [[属性]]では、
[[時間]]が[[秒]]単位の[[数]]によって表現されます。
[SRC@en[[[HTML5]]]]

** 文脈

[56] [CODE(HTMLa)@en[[[type]]]] が [CODE(HTML)@en[[[datetime]]]] の [CODE(HTMLe)@en[[[input]]]]
[[要素]]で使われます。

[57] [CODE(HTMLe)@en[[[ins]]]] [[要素]]や [CODE(HTMLe)@en[[[del]]]] [[要素]]の
[CODE(HTMLa)@en[[[datetime]]]] [[属性]]で使われます。

[136] [CODE(HTMLe)@en[[[time]]]] [[要素]]で使われます。

[139] [[vCard]] [[マイクロデータ]]の [CODE[[[rev]]]]
の値で使われます。

[138] [[vEvent]] [[マイクロデータ]]の [CODE[[[created]]]],
[CODE[[[last-modified]]]] の値で使われます。

[137] [[妥当な日付文字列と省略可能な時刻]]や[[HTMLの時刻の範囲の形式]]で使われます。

** レンダリング

[140] [CODE(HTMLe)@en[[[ins]]]]/[CODE(HTMLe)@en[[[del]]]] の [CODE(HTMLa)@en[[[datetime]]]]
[[属性]]では、指定された[[時間帯]]で表示する[['''べき''']]とされています。

** 関連

[147] [[ISO 8601の日付形式]>>25]に、類似形式との比較があります。

[44] [[JavaScript]] では、 [CODE(JS)@en[Date]] [[オブジェクト]]の
[CODE(JS)@en[toISOString]] [[メソッド]]により取得できます。
(厳密には定義が異なりますが、実用上は無視できる程度の違いです。)

** 例

[34] [CODE(HTML example)[0037-12-13T00:00Z]] [SRC@en[[[HTML5]]]]

[[ローマ皇帝]][[ネロ]]の[[誕生日]] ([[ユリウス暦]]37年12月15日の[[グレゴリオ暦]]換算) 
の[[真夜中]]を表します。なお、
[CODE(HTML bad example)[[[37-12-13]]]] は[[年]]が4桁に満たないので、
[[妥当な大域日時文字列]]ではありません。

[35] [CODE(HTML example)[1979-10-14T12:00:00.001-04:00]] [SRC@en[[[HTML5]]]]

[[北米東海岸]]の[[夏時刻]]中の1979年10月14日の[[正午]]から1[[ミリ秒]]後を表します。

[36] [CODE(HTML example)[8592-01-01T02:09+02:09]] [SRC@en[[[HTML5]]]]

将来の[[時刻]]です。端数の[[時間帯]]は現在[[地球上]]では用いられていませんが、
仕様上は認められています。

* 暦法との関係

** 過去の日付

[12] [[HTML]] は[[グレゴリオ暦]] (だけ) を採用しています。[[グレゴリオ暦]]が採用される以前の[[日付]]も表すことができますが、
[[グレゴリオ暦]]を過去に延長した場合に相当する[[日付]]を使って表されます
([[先発グレゴリオ暦]] (proleptic グレゴリオ暦) などと呼ばれます)。

[39] [[年]]は[[正数]]のみを指定できます。0年や負の年は認められていません。

;; [10] [[過去の日時]]も参照。

** 将来の日付

[37] 現在の [[HTML]] では、[[年]]の桁数が4桁以上で無制限とされており、[[1万年問題]]は存在しません。

[HISTORY[
[38] 過去の版の [[HTML5]] 案や [[Web Forms 2.0]] や [[HTML4]] では[[年]]は4桁に制限されていました。
]HISTORY]

;; [11] [[将来の日時]]も参照。

** 閏年

[95] [[HTMLの日付形式]]は[[先発グレゴリオ暦]]に従って[[閏年]]に対応しています。

[96] [[年]]を含んでいない[[妥当な月日文字列]]については、[[閏年]]同様2月29日 ([CODE[--02-29]])
が認められています。

** 閏秒

[22] [[HTML]] の[[日付形式]]は[[閏秒]]に対応していません。[[秒]]の部分に 60 や 61
を使うことは認められていません。

* 照合順序

[142] [CODE(HTMLa)@en[[[sortable]]]] な [CODE(HTMLe)@en[[[table]]]] で用いられる[[照合順序]]について、
次のように定められています。

[143] [[月]]、[[日付]]、[[週]]は、その最初の瞬間を表す[[地方日時]]と等価とします [SRC[>>141]]。

[144] 型の違う値同士は、次の順序とします [SRC[>>141]]。
[FIG[
= [[時刻]]
= [[月日]]
= [[地方日時]]
= [[大域日時]]
= [[時差]]
= [[時間]]
= [[文字列]]
]FIG]

[145] 同じ型同士の順序は、その大小によって決めます。

* 関連

[60] [[時刻]]でなく[[時間]]を表すものとしては、
[CODE(HTMLa)@en[[[http-equiv]]]] [[属性]]が [CODE(HTTP)@en[[[Refresh]]]]
の場合の [CODE(HTMLa)@en[[[content]]]] [[属性値]]の書式 ([[秒]]数を指定) があります。

以前の [[HTML5]] 案には [CODE(HTMLe)@en[[[audio]]]] [[要素]]や [CODE(HTMLe)@en[[[video]]]] [[要素]]に[[媒体]]中の[[時間]]的位置を表す[[内容属性]]がありましたが、
既に削除されています。
[[秒]]数を返す [[DOM属性]]は削除されずに残っています。

* 歴史

[46] [[HTML]] の[[日付形式]]は、 [[HTML 4.0]] で [CODE(HTMLa)@en[[[datetime]]]]
[[属性]]が導入されたことではじめて規定され、後に [[Web Forms 2.0]] と [[HTML5]]
により拡張され現在に至っています。

** [CODE(SGML)[%Datetime;]] 型 (HTML4/XHTML1)

[1] [[HTML 4]] の [DFN[[CODE(SGML)[%Datetime;]]]] 型は、
[[W3C-DTF]] の2番目に長い (秒未満までは表現できない)
形式です。

[6] 仕様書:
- [[HTML 4]]
-- <IW:HTML4:"types.html#type-datetime">
-- [[厳密DTD]]  <IW:HTML4:"sgml/dtd.html#Datetime">
-- [[移行用DTD]]  <IW:HTML4:"sgml/loosedtd.html#Datetime">
-[[XHTML 1.0]]
-- [CSECTION[A.1.1. XHTML-1.0-Strict]]
<http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#dtdentry_xhtml1-strict.dtd_Datetime>
-- [CSECTION[A.1.2. XHTML-1.0-Transitional]]
<http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#dtdentry_xhtml1-transitional.dtd_Datetime>
-- [CSECTION[A.1.3. XHTML-1.0-Frameset]]
<http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#dtdentry_xhtml1-frameset.dtd_Datetime>
- [[XHTML m12n]]
--[CSECTION[4.3. Attribute Types]]
<IW:XHTML1m12n:"abstraction.html#dt_Datetime">

[5]
:[[引数実体名]]:[CODE(SGML)[%Datetime]] ([[HTML 4]], [[XHTML 1.0]])
:抽象属性型名:[CODE[Datetime]] ([[XHTML m12n]])
:属性型名:[Q[datetime]] ([[HTML 4]])
:[[SGML]] [[属性型]]:[CODE(SGML)[[[CDATA]]]]
:[[XML]] [[属性型]]:[CODE(XML)[[[CDATA]]]]
:大文字・小文字:区別あり

[2] 大文字・小文字は区別されます。
[CODE(HTML)[T]] と [CODE(HTML)[Z]] が使われ得ますが、
いずれも大文字でなければなりません。

[3] 時・分・秒が得られない時は、 [CODE(HTML)[00]]
としてもよいことになっています。
閏秒の 60秒は W3C‐DTF では表現できません。

[4]
[CODE(HTMLe)[[[ins]]]] 要素や [CODE(HTMLe)[[[del]]]] 要素の [CODE(HTMLa)[[[datetime]]]] 属性が [CODE(SGML)[%Datetime]] 型です。

** HTML5

[40] 現在 [[HTML]] で定義されている[[日付形式]]のほとんどは、 [[Web Forms 2.0]]
で[[日時]]関係の[[フォーム制御子]]を実現するために導入されました。

[41] [[HTML5]] では [[HTML4]] から引き継いだ [CODE(HTMLe)@en[[[ins]]]] [[要素]]や
[CODE(HTMLe)@en[[[del]]]] [[要素]]の [CODE(HTMLa)@en[[[datetime]]]] [[属性]]のための[[日付形式]] 
(現在の[[大域日時]]) に加え、
[CODE(HTMLe)@en[[[time]]]] [[要素]]のための[[日付や時刻]]の書式が導入されました。

[42] その後 [[Web Forms 2.0]] が [[HTML5]] に統合された際に、これらの定義は整理され、
本稿で紹介したような形になりました。この時、[[1万年問題]]への対応など細かい点が改められています。

-*-*-

[29] [[フォーム制御子]]用の[[日時]]の値は、 [[WF2]] で当初から規定されていました。
[CODE(HTML)[<input type>]] ごとに (現在とほぼ同じ) 多数の形式が用意されていました。
最初は、完全に [[ISO 8601]] を参照していました [SRC[>>30]]。
後の版では、 [[ISO 8601]] を参照しつつ、構文が明示的に定義されていた一方で、
[[構文解析]]の方法はまだ明確にされていませんでした [SRC[>>28]]。

[REFS[
- [30] [CITE@en[XHTML Module: Extensions to Form Controls]] ([TIME[2017-05-15 18:52:48 +09:00]]) <http://www.hixie.ch/specs/html/forms/hfp.html#TOC21>
- [28] [CITE@en-GB-hixie[Web Forms 2.0]] ([TIME[2017-05-04 02:11:24 +09:00]]) <https://whatwg.org/specs/web-forms/2004-06-27-call-for-comments/#extensions0>
]REFS]

[13] [CODE(HTMLe)@en[ins]] [[要素]]と [CODE(HTMLe)@en[del]] [[要素]]は、
[TIME[2005年4月16日][2005-04-16]]版 (現存せず) [[WA1]] で追加されました。
[CODE(HTMLa)@en[datetime]] [[属性]]もこのときに追加されました。

[15] この当時は、[[属性値]]の[[適合性]]は、
[[妥当な大域日時文字列]]に相当するものが直接規定されていました。
一方で[[構文解析]]は [[ISO 8601]] を参照する形になっており、
[[ISO 8601]] に従い解釈できない場合は無視することとされていました。 [SRC[>>14]]

[REFS[
- [14] [CITE@en-GB-hixie[Web Applications 1.0]]
[TIME[2005年4月17日][2005-04-17]]版
<https://web.archive.org/web/20050418080151/http://www.whatwg.org/specs/web-apps/current-work/#attributes>
]REFS]


[82] [CITE[Issues relating to the syntax of dates and times]] ([[Ian Hickson <ian@...>]] 著, [TIME[2008-11-25 11:22:31 +09:00]] 版) <http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/16763>

[83] [CITE@en[(X)HTML5 Tracking]]
([TIME[2009-08-23 10:09:22 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=2380&to=2381>

[84] [CITE@en[(X)HTML5 Tracking]]
([TIME[2009-08-23 10:11:22 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=2381&to=2382>

[85] [CITE@en[(X)HTML5 Tracking]] ([TIME[2009-10-18 17:21:48 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=3717&to=3718>

@@ [86] >>85 の変更分を反映する

[87] [CITE@en[(X)HTML5 Tracking]]
([TIME[2009-10-25 11:25:22 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4317&to=4318>

[88] [CITE@en[Web Applications 1.0 r6235     Define the serialisation requirments for type=datetime.]]
( ([TIME[2011-06-16 08:13:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6234&to=6235>


[89] [CITE[Basic Data Types and Interfaces – SVG 1.1 (Second Edition)]]
( ([TIME[2011-08-10 12:35:27 +09:00]] 版))
<http://www.w3.org/TR/2011/REC-SVG11-20110816/types.html#DataTypeTime>


[90] [CITE@en[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.]]
( ([TIME[2012-01-12 08:14:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6891&to=6892>

[91] [CITE['''['''whatwg''']''' Time Parsing]]
([TIME[2012-01-12 09:07:23 +09:00]] 版)
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-January/034344.html>

[92] [CITE@en[Web Applications 1.0 r6893     Define how to convert a time to a Date object if it's not a round number of milliseconds.]]
( ([TIME[2012-01-12 09:03:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6892&to=6893>

[9] [CITE@en[Sort out the handling of seconds in "parse a time component" · whatwg/html@06059a8]]
([TIME[2016-03-08 18:27:51 +09:00]] 版)
<https://github.com/whatwg/html/commit/06059a864e93441cb85d10d719cf306985aa1c48>

[43] [[RFC 3339]] [[デマ]]については [[RFC 3339の日時形式]]を参照。

[47] 
[[W3C]] の [[HTML 5.2]] などでは[[年]]の[[値域]]がおかしい問題があるようですが、
誰も [[W3C]] の [[HTML]] 5.x は相手にしていないので、
無視して大丈夫です。
(問題があることを知っている人すらほとんどいない。)

[FIG(quote)[
[FIGCAPTION[
[48] [CITE@ja-jp[ベイビーウルフの時間だよ!(第2回) - 2019/01/14 12:00開始 - ニコニコ生放送]]
([TIME[2019-01-14 12:10:04 +09:00]])
<http://live.nicovideo.jp/gate/lv317852272>
]FIGCAPTION]

> 	<meta itemprop="datePublished" content="2019-01-14T12:00+0900"/>

]FIG]


[FIG(quote)[
[FIGCAPTION[
[49] [CITE@ja[再生制限 | サービス・機能 | NTTドコモ]]
([TIME[2020-12-29T11:42:27.000Z]])
<https://www.nttdocomo.co.jp/service/developer/make/content/imotion/mp4/feature/contents_protection/play_restriction/index.html>
]FIGCAPTION]

> 【記述例】日本時間で2002年12月25日0時0分まで再生可能とする場合
> <OBJECT declare id="fomacm.declaration" data="fomacm.3gp" type="video/3gpp">
> <PARAM name="period" value="2002/12/24/15/00" valuetype="data">
> </OBJECT>

]FIG]


[FIG(quote)[
[FIGCAPTION[
[50] [CITE@ja[再生制限 | サービス・機能 | NTTドコモ]]
([TIME[2020-12-29T11:43:20.000Z]])
<https://www.nttdocomo.co.jp/service/developer/make/content/imotion/mp4/feature/contents_protection/play_restriction/index.html>
]FIGCAPTION]

> 再生可能日数	再生開始日から再生を可能とする日数を整数にて指定
> 1日単位で宣言し、上限値は999日

]FIG]
