-
Notifications
You must be signed in to change notification settings - Fork 4
/
458.txt
578 lines (425 loc) · 25.7 KB
/
458.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
[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]] の[[マイクロデータ]]で使われます。
* 地方日時
[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]に、類似形式との比較があります。
** 例
[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>