/[pub]/suikawiki/sw4data/ids/8/458.txt
Suika

Contents of /suikawiki/sw4data/ids/8/458.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.29 - (show annotations) (download)
Thu Jan 12 12:04:09 2012 UTC (13 years, 5 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
Changes since 1.28: +5 -1 lines
File MIME type: text/plain
updated by (anon)

1 [7] [[HTML]] ではいくつかの[[属性]]などで[[日時]]を表す文字列が用いられています。
2 そのほとんどは [[ISO 8601の日付形式]]に近いものですが、歴史的な理由により異なる書式を採用している文脈もあります。
3
4 [[HTML]] で定義されている[[日付形式]]には、次のものがあります。
5 - [[時刻]]
6 - [[月]]
7 - [[日付]]
8 - [[地方日時]]
9 - [[大域日時]]
10 - [[日付か時刻]]
11 - [[週]]
12 - [CODE(DOMa)@en[[[lastModified]]]] の書式 → [CODE(DOMa)@en[[[lastModified]]]] の項を参照。
13
14 [8] 仕様書:
15 - [[HTML5]] <http://www.whatwg.org/specs/web-apps/current-work/#dates-and-times>
16
17 ;; [51] 本項では [[HTML5]] の定義に基づき説明しますが、
18 構文の定義や算法の定義は必ずしも仕様書の通りではありません。仕様書の規定と等価な別な表現で説明していることがあります。
19
20 * 定義
21
22 [10] [DFN[[RUBYB[数字]@en[digit]]]]とは、
23 [CODE(char)[[[U+0030]]]]〜[CODE(char)[[[U+0039]]]] の[[文字]]であって、
24 [[十進数]]を表すために使われます [SRC@en[[[HTML5]]]]。
25
26 [9] ある[[年]]のある[[月]]の[[日]]の数は、[[グレゴリオ暦]]に基づき、次のように定義されています
27 [SRC@en[[[HTML5]]]]。
28 - [[1月]]、[[3月]]、[[5月]]、[[7月]]、[[8月]]、[[10月]]、[[12月]]は、 '''31'''
29 - [[4月]]、[[6月]]、[[9月]]、[[11月]]は、 '''30'''
30 - [[2月]]は、
31 -- [[年]]が400で割り切れるか、または4で割り切れて100で割り切れないなら
32 ([[閏年]]なら)、 '''29'''
33 -- それ以外なら、 '''28'''
34
35 * 時刻
36
37 [20] [DFN[[RUBYB[時刻]@en[time]]]]は、特定の[[時刻]]を表し、
38 [[時]]、[[分]]、[[秒]]、[[秒の小数部]]から成ります。[[時間帯]]の情報は持ちません。
39 [SRC@en[[[HTML5]]]]
40
41 ** 構文定義
42
43 -[21] [CODE(ABNF)[[DFN[[RUBYB[妥当な時刻文字列]@en[valid time string]]]] := 2[[数字]] ":" 2[[数字]] [":" 2[[数字]] ["." 1*[[数字]] ] ] ]]
44 [SRC@en[[[HTML5]]]]
45 -- 1つ目の[[数字]]列は、[[時]]を表す 0〜23 の[[数]]
46 -- 2つ目の[[数字]]列は、[[分]]を表す 0〜59 の[[数]]
47 -- 3つ目の[[数字]]列は、[[秒]]の[[整数部]]を表す 0〜59 の[[数]] ([[秒]]が 0 の時だけ省略可能)
48 -- 4つ目の[[数字]]列は、[[秒]]の[[小数部]]を表す値 ([[秒]]が[[整数]]の時だけ省略可能)
49
50 ** 構文解析
51
52 [23] [DFN[[RUBYB[時刻文字列の構文解析]@en[parse a time string]]]]
53 [SRC@en[[[HTML5]]]]:
54 = [[時刻部品の構文解析]]を行い、それが何も返さなかったら、何も返さないで終える
55 = [[文字列]]がそれで終わっていなければ、何も返さないで終える
56 = (1) で得られた[[時]]と[[分]]と[[秒]]を返す
57
58 [24] [DFN[[RUBYB[時刻部品の構文解析][parse a time component]]]]
59 [SRC@en[[[HTML5]]]]:
60 = [[文字列]]が[[正規表現]] [CODE(regexp)[([[数字]]{2}):([[数字]]{2})(?::([[数字]]{2}(?:\.[[数字]]+)?))?]]
61 に[[一致]]しない場合、何も返さず終わる
62 = $1 を[[十進数]]として解釈したものを[[時]]とする
63 = $2 を[[十進数]]として解釈したものを[[分]]とする
64 = $3 を[[十進数]]として解釈したものを[[秒]]とする ($3 がない場合、 0 とする)
65 = [[時]]が 0〜23 でない場合、何も返さない
66 = [[分]]が 0〜59 でない場合、何も返さない
67 = [[秒]]が 60 [[未満]]の[[正数]]でない場合、何も返さない
68 = [[時]]と[[分]]と[[秒]]を返す
69
70 ** 数値表現
71
72 [63] [CODE(DOMa)@en[[[valueAsNumber]]]] [[DOM属性]]では、
73 [[1970年1月1日]]の[[0時0分]] ([[UTC]]) からの[[ミリ秒]]の数によって表現されます。
74 [SRC@en[[[HTML5]]]]
75
76 [64] [CODE(DOMa)@en[[[valueAsDate]]]] [[DOM属性]]では、
77 [[1970年1月1日]]における[[時刻]] ([[UTC]]) とした [CODE(JS)@en[[[Date]]]] [[物体]]によって表現されます。
78 [SRC@en[[[HTML5]]]]
79
80 [65] [[時刻]]を入力する [CODE(HTMLe)@en[[[input]]]]
81 [[要素]]の [CODE(HTMLa)@en[[[step]]]] [[属性]]では、
82 [[時間]]が[[秒]]単位の[[数]]によって表現されます。
83 [SRC@en[[[HTML5]]]]
84
85 ** 文脈
86
87 [54] [CODE(HTMLa)@en[[[type]]]] が [CODE(HTML)@en[[[time]]]] の [CODE(HTMLe)@en[[[input]]]]
88 [[要素]]で使われます。
89
90 * 月
91
92 [11] [DFN[[RUBYB[月]@en[month]]]]は、[[グレゴリオ暦]]上の[[日付]]を表します。ただし、
93 [[月]]は[[時間帯]]の情報を持ちませんし、[[日付]]の精度は[[年]]と[[月]]だけで、[[日]]は特定しません。
94 [SRC@en[[[HTML5]]]]
95
96 ** 構文定義
97
98 - [13] [CODE(ABNF)[[DFN[[RUBYB[妥当な月]@en[valid month]]]] := 4*[[数字]] "-" 2[[数字]]]]
99 [SRC@en[[[HTML5]]]]
100 -- 1つ目の[[数字]]列は、[[年]]を表す[[正数]]
101 -- 2つ目の[[数字]]列は、[[月]]を表す 1〜12 の[[数]]
102
103 ** 構文解析
104
105 [14] [DFN[[RUBYB[月文字列の構文解析]@en[parse a month string]]]]
106 [SRC@en[[[HTML5]]]]:
107 = [[月部品の構文解析]]を行い、それが何も返さなかったら、何も返さないで終える
108 = [[文字列]]がそれで終わっていなければ、何も返さないで終える
109 = (1) で得られた[[年]]と[[月]]を返す
110
111 [15] [DFN[[RUBYB[月部品の構文解析][parse a month component]]]]
112 [SRC@en[[[HTML5]]]]:
113 - 与えられた[[文字列]]が[[正規表現]] [CODE(regexp)[([[数字]]{4,})-([[数字]]{2})]]
114 に[[一致]]すれば、
115 -= $1 を[[十進数]]として解釈したものを[[年]]とする
116 -= $2 を[[十進数]]として解釈したものを[[月]]とする
117 -= [[年]]が 0 なら、何も返さない
118 -= [[月]]が 1〜12 でなければ、何も返さない
119 -= そうでない場合、[[年]]と[[月]]を返す
120 - そうでない場合、何も返さない
121
122 ** 数値表現
123
124 [66] [CODE(DOMa)@en[[[valueAsNumber]]]] [[DOM属性]]では、
125 [[1970年]][[1月]]からの[[月]]の数によって表現されます。
126
127 ;; [69] 他とは違ってこれだけ[[ミリ秒]]単位の[[数]]ではなく、[[月]]の数になっています。
128 [[年]]によって[[月]]に属する[[日]]の数が異なるからでしょうか。
129
130 [67] [CODE(DOMa)@en[[[valueAsDate]]]] [[DOM属性]]では、
131 その[[月]]の[[真夜中]]を [[UTC]] で表す [CODE(JS)@en[[[Date]]]] [[物体]]によって表現されます。
132 [SRC@en[[[HTML5]]]]
133
134 [68] [[月]]を入力する [CODE(HTMLe)@en[[[input]]]]
135 [[要素]]の [CODE(HTMLa)@en[[[step]]]] [[属性]]では、
136 [[時間]]が[[月]]単位の[[数]]によって表現されます。
137 [SRC@en[[[HTML5]]]]
138
139 ** 文脈
140
141 [52] [CODE(HTMLa)@en[[[type]]]] が [CODE(HTML)@en[[[month]]]] の [CODE(HTMLe)@en[[[input]]]] [[要素]]で使用されます。
142
143 * 日付
144
145 [16] [DFN[[RUBYB[日付]@en[date]]]]は、[[グレゴリオ暦]]上の[[日付]]を表します。
146 [[日付]]には[[年]]、[[月]]、[[日]]が含まれますが、[[時間帯]]は含まれません。
147 [SRC@en[[[HTML5]]]]
148
149 ** 構文定義
150
151 -[17] [CODE(ABNF)@en[[DFN[[RUBYB[妥当な日付文字列]@en[valid date string]]]] := [[妥当な月文字列]] "-" 2[[数字]]]]
152 [SRC@en[[[HTML5]]]]
153 -- 最後の[[数字]]列は、[[年]]と[[月]]に基づく[[日]]の数 (>>9) [[以下]]の[[正数]]で、[[日]]を表す
154
155 ** 構文解析
156
157 [18] [DFN[[RUBYB[日付文字列の構文解析]@en[parse a date string]]]]
158 [SRC@en[[[HTML5]]]]:
159 = [[日付部品の構文解析]]を行い、それが何も返さなかったら、何も返さないで終える
160 = [[文字列]]がそれで終わっていなければ、何も返さないで終える
161 = (1) で得られた[[年]]と[[月]]と[[日]]を返す
162
163 [19] [DFN[[RUBYB[日付部品の構文解析][parse a date component]]]]
164 [SRC@en[[[HTML5]]]]:
165 = [[月部品の構文解析]]により、[[年]]と[[月]]を得る。何も返されなかった場合、何も返さず終わる
166 = [[文字列]]の続きが[[正規表現]] [CODE(regexp)[-([[数字]]{2})]] に[[一致]]しない場合、何も返さず終わる
167 = $1 を[[十進数]]として解釈したものを[[日]]とする
168 = [[日]]が[[年]]と[[月]]に基づく[[日]]の数 (>>9) [[以下]]の[[正数]]でなければ、何も返さず終わる
169 = [[年]]と[[月]]と[[日]]を返す
170
171 ** 数値表現
172
173 [70] [CODE(DOMa)@en[[[valueAsNumber]]]] [[DOM属性]]では、
174 [[1970年1月1日]]の[[0時0分]] ([[UTC]]) からその[[日]]の[[真夜中]]
175 ([[UTC]]) までの[[ミリ秒]]の数によって表現されます。
176 [SRC@en[[[HTML5]]]]
177
178 [71] [CODE(DOMa)@en[[[valueAsDate]]]] [[DOM属性]]では、
179 その[[日]]の[[真夜中]] ([[UTC]]) を表す [CODE(JS)@en[[[Date]]]] [[物体]]によって表現されます。
180 [SRC@en[[[HTML5]]]]
181
182 [72] [[日付]]を入力する [CODE(HTMLe)@en[[[input]]]]
183 [[要素]]の [CODE(HTMLa)@en[[[step]]]] [[属性]]では、
184 [[時間]]が[[日]]単位の[[数]]によって表現されます。
185 [SRC@en[[[HTML5]]]]
186
187 ** 文脈
188
189 [53] [CODE(HTMLa)@en[[[type]]]] が [CODE(HTML)@en[[[date]]]] の [CODE(HTMLe)@en[[[input]]]]
190 [[要素]]で使われます。
191
192 * 地方日時
193
194 [25] [DFN[[RUBYB[地方日時]@en[local date and time]]]]は、
195 [[グレゴリオ暦]]上の[[日時]]を表します。
196 [[年]]、[[月]]、[[日]]、[[時]]、[[分]]、[[秒]]、[[秒の小数部]]から成ります。
197 [[時間帯]]の情報は含みません。
198 [SRC@em[[[HTML5]]]]
199
200 ** 構文定義
201
202 -[26] [CODE(ABNF)@en[[DFN[[RUBYB[妥当な地方日時文字列]@en[valid local date and time string]]]] := [[妥当な日時文字列]] 'T' [[妥当な時刻文字列]]]]
203 [SRC@em[[[HTML5]]]]
204 -- 「T」は[[大文字]]でなければなりません。
205
206 ** 構文解析
207
208 [27] [DFN[[RUBYB[地方日時文字列の構文解析]@en[parse a local date and time string]]]] [SRC@en[[[HTML5]]]]:
209 = [[日付部品の構文解析]]により、[[年]]と[[月]]と[[日]]を得る。何も返されなかった場合、
210 何も返さず終わる
211 = [[文字列]]の次の[[文字]]が[[大文字]]の「[CODE(char)[[[T]]]]」でない場合、
212 何も返さず終わる
213 = [[時刻部品の構文解析]]により、[[時]]と[[分]]と[[秒]]を得る。何も返されなかった場合、
214 何も返さず終わる
215 = [[文字列]]がそれで終わっていなければ、何も返さず終わる
216 = [[年]]と[[月]]と[[日]]と[[時]]と[[分]]と[[秒]]を返す
217
218 ** 数値表現
219
220 [73] [CODE(DOMa)@en[[[valueAsNumber]]]] [[DOM属性]]では、
221 [[1970年1月1日]]の[[0時0分]]からの[[ミリ秒]]の数によって表現されます。
222 [SRC@en[[[HTML5]]]]
223
224 [74] [CODE(DOMa)@en[[[valueAsDate]]]] [[DOM属性]]での表現は定義されていません。
225 [SRC@en[[[HTML5]]]]
226
227 [75] [[地方日時]]を入力する [CODE(HTMLe)@en[[[input]]]]
228 [[要素]]の [CODE(HTMLa)@en[[[step]]]] [[属性]]では、
229 [[時間]]が[[秒]]単位の[[数]]によって表現されます。
230 [SRC@en[[[HTML5]]]]
231
232 ** 文脈
233
234 [55] [CODE(HTMLa)@en[[[type]]]] が [CODE(HTML)@en[[[datetime-local]]]] の [CODE(HTMLe)@en[[[input]]]]
235 [[要素]]で使われます。
236
237 * 時間帯
238
239 [28] [[大域日時]]や[[日付や時刻]]には[RUBYB[[[時間帯]]]@en[timezone]]の情報を含めることができます。
240 [[時間帯]]には、[[時]]と[[分]]の情報が含まれます。
241
242 ** 構文定義
243
244 - [CODE(ABNF)@en[[DFN[時間帯]] := '[[Z]]' / ("[[+]]" / "[[-]]") 2[[数字]] ":" 2[[数字]]]]
245 [SRC@en[[[HTML5]]]]
246 -- 「[CODE(char)[[[Z]]]]」は [[UTC]] を表す
247 -- 1つ目の[[数字]]列は[[時差]]の[[時]]を表す 0〜23 の[[数]]
248 -- 2つ目の[[数字]]列は[[時差]]の[[分]]を表す 0〜59 の[[数]]
249 -- ただし「[CODE[[[-00:00]]]]」は使用禁止
250
251 ** 構文解析
252
253 [29] [DFN[[RUBYB[時間帯部品の構文解析]@en[parse a timezone component]]]] [SRC@en[[[HTML5]]]]:
254 = 次の[[文字]]が[[大文字]]の「[CODE(char)[[[Z]]]]」 であれば、
255 [[時]]として 0、[[分]]として 0 を返して終わる
256 = [[文字列]]が[[正規表現]] [CODE(regexp)[([+-]2[[数字]]):(2[[数字]])]] に[[一致]]しない場合、
257 何も返さずに終わる
258 = $1 を[[十進数]]として解釈したものを[[時]]とする
259 = $2 を[[十進数]]として解釈したものを[[分]]とする
260 = [[時]]が -23〜23 でない場合、何も返さない
261 = [[分]]が 0〜59 でない場合、何も返さない
262 = [[時]]と[[分]]を返す
263
264 [30] [[RFC 3339の日付形式]]などでは [[-00:00]] に[[時間帯]]不明という意味が与えられていますが、
265 [[HTML]] の[[日付形式]]では禁止されています。
266
267 * 大域日時
268
269 [31] [DFN[[RUBYB[大域日時]@en[global date and time]]]]は、
270 [[グレゴリオ暦]]上の[[日時]]を表します。
271 [[年]]、[[月]]、[[日]]、[[時]]、[[分]]、[[秒]]、[[秒の小数部]]、[[時間帯]]から成ります。
272 [SRC@em[[[HTML5]]]]
273
274 ** 構文定義
275
276 -[32] [CODE(ABNF)@en[[DFN[[RUBYB[妥当な大域日時文字列]@en[valid global date and time string]]]] := [[妥当な日時文字列]] '[[T]]' [[妥当な時刻文字列]] [[時間帯]]]]
277 [SRC@em[[[HTML5]]]]
278 -- 「[CODE(char)[[[T]]]]」は[[大文字]]でなければなりません。
279
280 ** 構文解析
281
282 [33] [DFN[[RUBYB[大域日時文字列の構文解析]@en[parse a global date and time string]]]] [SRC@en[[[HTML5]]]]:
283 = [[日付部品の構文解析]]により、[[年]]と[[月]]と[[日]]を得る。何も返されなかった場合、
284 何も返さず終わる
285 = [[文字列]]の次の[[文字]]が[[大文字]]の「[CODE(char)[[[T]]]]」でない場合、
286 何も返さず終わる
287 = [[時刻部品の構文解析]]により、[[時]]と[[分]]と[[秒]]を得る。何も返されなかった場合、
288 何も返さず終わる
289 = [[時間帯部品の構文解析]]により、[[時間帯]]の[[時]]と[[分]]を得る。何も返されなかった場合、
290 何も返さず終わる
291 = [[文字列]]がそれで終わっていなければ、何も返さず終わる
292 = [[年]]~[[秒]]を、[[時間帯]]の情報を使って [[UTC]] に換算する
293 = [[年]]と[[月]]と[[日]]と[[時]]と[[分]]と[[秒]]と[[時間帯]]の[[時]]と[[分]]を返す
294
295 ** 数値表現
296
297 [76] [CODE(DOMa)@en[[[valueAsNumber]]]] [[DOM属性]]では、
298 [[1970年1月1日]]の[[0時0分]] ([[UTC]]) からの[[ミリ秒]]の数によって表現されます。
299 [SRC@en[[[HTML5]]]]
300
301 [77] [CODE(DOMa)@en[[[valueAsDate]]]] [[DOM属性]]では、
302 [[UTC]] におけるその[[時刻]]を表す [CODE(JS)@en[[[Date]]]] [[物体]]によって表現されます。
303 [SRC@en[[[HTML5]]]]
304
305 [78] [[大域日時]]を入力する [CODE(HTMLe)@en[[[input]]]]
306 [[要素]]の [CODE(HTMLa)@en[[[step]]]] [[属性]]では、
307 [[時間]]が[[秒]]単位の[[数]]によって表現されます。
308 [SRC@en[[[HTML5]]]]
309
310 ** 文脈
311
312 [56] [CODE(HTMLa)@en[[[type]]]] が [CODE(HTML)@en[[[datetime]]]] の [CODE(HTMLe)@en[[[input]]]]
313 [[要素]]で使われます。
314
315 [57] [CODE(HTMLe)@en[[[ins]]]] [[要素]]や [CODE(HTMLe)@en[[[del]]]] [[要素]]の
316 [CODE(HTMLa)@en[[[datetime]]]] [[属性]]で使われます。
317
318 ** 例
319
320 [34] [CODE(HTML example)[0037-12-13T00:00Z]] [SRC@en[[[HTML5]]]]
321
322 [[ローマ皇帝]][[ネロ]]の[[誕生日]] ([[ユリウス暦]]37年12月15日の[[グレゴリオ暦]]換算)
323 の[[真夜中]]を表します。なお、
324 [CODE(HTML bad example)[[[37-12-13]]]] は[[年]]が4桁に満たないので、
325 [[妥当な大域日時文字列]]ではありません。
326
327 [35] [CODE(HTML example)[1979-10-14T12:00:00.001-04:00]] [SRC@en[[[HTML5]]]]
328
329 [[北米東海岸]]の[[夏時刻]]中の1979年10月14日の[[正午]]から1[[ミリ秒]]後を表します。
330
331 [36] [CODE(HTML example)[8592-01-01T02:09+02:09]] [SRC@en[[[HTML5]]]]
332
333 将来の[[時刻]]です。端数の[[時間帯]]は現在[[地球上]]では用いられていませんが、
334 仕様上は認められています。
335
336 * 日付か時刻
337
338 [47] [DFN[[RUBYB[日付か時刻の文字列]@en[date or time string]]]]は、
339 [[日付]]か[[時刻]]か[[大域日時]]のいずれかです。
340 [SRC@en[[[HTML5]]]]
341
342 ** 構文定義
343
344 -[48] [CODE(ABNF)[[DFN[[RUBYB[妥当な日付か時刻の文字列]@en[valid date or time string]]]] := [[妥当な日付文字列]] / [[妥当な時刻文字列]] / [[妥当な大域日時文字列]]]]
345 -[49] [CODE(ABNF)[[DFN[[RUBYB[妥当な内容中の日付か時刻の文字列]@en[valid date or time string in content]]]] := *[[White_Space]] [[妥当な日付か時刻の文字列]] *[[White_Space]]]]
346
347 ** 構文解析
348
349 [50] [DFN[[RUBYB[日付か時刻の文字列の構文解析][parse a date or time string]]]] [SRC@en[[[HTML5]]]]:
350 = 先頭と末尾から [[White_Space]] を除去する (「内容中」の場合のみ)
351 = [[大域日時文字列の構文解析]]が値を返すなら、それを返して終わる
352 = [[日付の構文解析]]が値を返すなら、それを返して終わる
353 = [[時刻の構文解析]]が値を返すなら、それを返して終わる
354 = 何も返さないで終わる
355
356 ** 文脈
357
358 [59] [CODE(HTMLe)@en[[[time]]]] [[要素]]で使われます。
359 [CODE(HTMLa)@en[[[datetime]]]] [[属性]]では[[妥当な日付か時刻の文字列]]、
360 [[内容]]では[[妥当な内容中の日付か時刻の文字列]]の定義が用いられます。
361
362 * 週
363
364 [43] [DFN[[RUBYB[週]@en[week]]]]は、
365 [RUBYB[[[週年]]]@en[week‐year]]番号と週番号から成り、
366 7日間の期間を表します。 [SRC@en[[[HTML5]]]]
367
368 [[週]]は次のようなものです [SRC@en[[[HTML5]]]]。
369 - 1つの[[週年]]は52か53の[[週]]を含みます。
370 -- [[木曜日]]から始まる[[年]]は '''53''' です。
371 -- [[水曜日]]から始まる[[閏年]]は '''53''' です。
372 -- それ以外の[[年]]は '''52''' です。
373 -- なお、[[週年]]の最後の[[日]]を含む[[週]]の番号が[DFN[[RUBYB[最終日の週番号]@en[week number of the last day]]]]です。
374 - [[週]]は7日間の期間です。
375 - [[1970年]]の 1 番の[[週]]は[[1969年]]12月29日 ([[月曜日]]) に始まります。
376
377 ;; [[グレゴリオ暦]]における[[年]]の中で最初の[[木曜日]]を含む[[週]]が、
378 ある[[週年]]の最初の[[週]]になります。 [SRC@en[[[HTML5]]]]
379
380 [61] つまり、[[週]]は[[月曜日]]に始まり[[日曜日]]に終わります。
381
382 [62] [[1月1日]]が[[月曜日]]〜[[木曜日]]なら[[1月1日]]はその[[年]]と同じ[[週年]]の最初の[[週]]に属しますが、
383 [[金曜日]]〜[[日曜日]]なら[[年]]の1つ前の[[週年]]の最後の[[週]]に属します。
384 [[12月29日]]〜[[12月31日]]は次の[[年]]と同じ[[週年]]に属する可能性があります。
385 [[1月1日]]〜[[1月3日]]は前の[[年]]と同じ[[週年]]に属する可能性があります。
386
387 ** 構文定義
388
389 -[44] [CODE(ABNF)[[DFN[[RUBYB[妥当な週文字列]@en[valid week string]]]] := 4*[[数字]] '-W' 2[[数字]]]]
390 [SRC@en[[[HTML5]]]]
391 -- 1つ目のの[[数字]]列は[[週年]]を表す[[正数]]
392 -- 2つ目の[[数字]]列は[[週]]を表す[[最終日の週番号]][[以下]]の[[正数]]
393
394 ** 構文解析
395
396 [45] [DFN[[RUBYB[週文字列の構文解析]@en[parse a week string]]]] [SRC@en[[[HTML5]]]]:
397 = 与えられた[[文字列]]''全体''が[[正規表現]] [CODE(regexp)[([[数字]]{4,})-W([[数字]]{2})]]
398 に[[一致]]しない場合、何も返さないで終わる
399 = $1 を[[十進数]]として解釈したものを[[週年]]とする
400 = $2 を[[十進数]]として解釈したものを[[週]]とする
401 = [[週年]]が 0 なら、何も返さないで終わる
402 = [[週]]が 1〜[[最終日の週番号]] でなければ、何も返さないで終わる
403 = [[週年]]と[[年]]を返す
404
405 ** 数値表現
406
407 [79] [CODE(DOMa)@en[[[valueAsNumber]]]] [[DOM属性]]では、
408 [[1970年1月1日]]の[[0時0分]] ([[UTC]]) からその[[週]]の[[月曜日]]の[[真夜中]]
409 ([[UTC]]) までの[[ミリ秒]]の数によって表現されます。
410 [SRC@en[[[HTML5]]]]
411
412 [80] [CODE(DOMa)@en[[[valueAsDate]]]] [[DOM属性]]では、
413 その[[週]]の[[月曜日]]の[[真夜中]] ([[UTC]]) を表す [CODE(JS)@en[[[Date]]]] [[物体]]によって表現されます。
414 [SRC@en[[[HTML5]]]]
415
416 [81] [[週]]を入力する [CODE(HTMLe)@en[[[input]]]]
417 [[要素]]の [CODE(HTMLa)@en[[[step]]]] [[属性]]では、
418 [[時間]]が[[週]]単位の[[数]]によって表現されます。
419 [SRC@en[[[HTML5]]]]
420
421 ** 文脈
422
423 [58] [CODE(HTMLa)@en[[[type]]]] が [CODE(HTML)@en[[[week]]]] の [CODE(HTMLe)@en[[[input]]]]
424 [[要素]]で使われます。
425
426 * 暦法との関係
427
428 ** 過去の日付
429
430 [12] [[HTML]] は[[グレゴリオ暦]] (だけ) を採用しています。[[グレゴリオ暦]]が採用される以前の[[日付]]も表すことができますが、
431 [[グレゴリオ暦]]を過去に延長した場合に相当する[[日付]]を使って表されます
432 ([[先発グレゴリオ暦]] (proleptic グレゴリオ暦) などと呼ばれます)。
433
434 [39] [[年]]は[[正数]]のみを指定できます。0年や負の年は認められていません。
435
436 ** 将来の日付
437
438 [37] 現在の版の [[HTML5]] では、[[年]]の桁数が4桁以上で無制限とされており、[[1万年問題]]は存在しません。
439
440 [38] 過去の版の [[HTML5]] 案や [[Web Forms 2.0]] や [[HTML4]] では[[年]]は4桁に制限されていました。
441
442 ** 閏秒
443
444 [22] [[HTML]] の[[日付形式]]は[[閏秒]]に対応していません。[[秒]]の部分に 60 や 61
445 を使うことは認められていません。
446
447 * 歴史
448
449 [46] [[HTML]] の[[日付形式]]は、 [[HTML 4.0]] で [CODE(HTMLa)@en[[[datetime]]]]
450 [[属性]]が導入されたことではじめて規定され、後に [[Web Forms 2.0]] と [[HTML5]]
451 により拡張され現在に至っています。
452
453 ** [CODE(SGML)[%Datetime;]] 型 (HTML4/XHTML1)
454
455 [1] [[HTML 4]] の [DFN[[CODE(SGML)[%Datetime]]]] 型は、
456 [[W3C-DTF]] の2番目に長い (秒未満までは表現できない)
457 形式です。
458
459 [6] 仕様書:
460 - [[HTML 4]]
461 -- <IW:HTML4:"types.html#type-datetime">
462 -- [[厳密DTD]] <IW:HTML4:"sgml/dtd.html#Datetime">
463 -- [[移行用DTD]] <IW:HTML4:"sgml/loosedtd.html#Datetime">
464 -[[XHTML 1.0]]
465 -- [CSECTION[A.1.1. XHTML-1.0-Strict]]
466 <http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#dtdentry_xhtml1-strict.dtd_Datetime>
467 -- [CSECTION[A.1.2. XHTML-1.0-Transitional]]
468 <http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#dtdentry_xhtml1-transitional.dtd_Datetime>
469 -- [CSECTION[A.1.3. XHTML-1.0-Frameset]]
470 <http://www.w3.org/TR/2002/REC-xhtml1-20020801/dtds.html#dtdentry_xhtml1-frameset.dtd_Datetime>
471 - [[XHTML m12n]]
472 --[CSECTION[4.3. Attribute Types]]
473 <IW:XHTML1m12n:"abstraction.html#dt_Datetime">
474
475 [5]
476 :[[引数実体名]]:[CODE(SGML)[%Datetime]] ([[HTML 4]], [[XHTML 1.0]])
477 :抽象属性型名:[CODE[Datetime]] ([[XHTML m12n]])
478 :属性型名:[Q[datetime]] ([[HTML 4]])
479 :[[SGML]] [[属性型]]:[CODE(SGML)[[[CDATA]]]]
480 :[[XML]] [[属性型]]:[CODE(XML)[[[CDATA]]]]
481 :大文字・小文字:区別あり
482
483 [2] 大文字・小文字は区別されます。
484 [CODE(HTML)[T]] と [CODE(HTML)[Z]] が使われ得ますが、
485 いずれも大文字でなければなりません。
486
487 [3] 時・分・秒が得られない時は、 [CODE(HTML)[00]]
488 としてもよいことになっています。
489 閏秒の 60秒は W3C‐DTF では表現できません。
490
491 [4]
492 [CODE(HTMLe)[[[ins]]]] 要素や [CODE(HTMLe)[[[del]]]] 要素の [CODE(HTMLa)[[[datetime]]]] 属性が [CODE(SGML)[%Datetime]] 型です。
493
494 ** HTML5 案
495
496 [40] 現在 [[HTML]] で定義されている[[日付形式]]のほとんどは、 [[Web Forms 2.0]]
497 で[[日時]]関係の[[フォーム制御子]]を実現するために導入されました。
498
499 [41] [[HTML5]] では [[HTML4]] から引き継いだ [CODE(HTMLe)@en[[[ins]]]] [[要素]]や
500 [CODE(HTMLe)@en[[[del]]]] [[要素]]の [CODE(HTMLa)@en[[[datetime]]]] [[属性]]のための[[日付形式]]
501 (現在の[[大域日時]]) に加え、
502 [CODE(HTMLe)@en[[[time]]]] [[要素]]のための[[日付や時刻]]の書式が導入されました。
503
504 [42] その後 [[Web Forms 2.0]] が [[HTML5]] に統合された際に、これらの定義は整理され、
505 本稿で紹介したような形になりました。この時、[[1万年問題]]への対応など細かい点が改められています。
506
507 [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>
508
509 * 関連
510
511 [60] [[時刻]]でなく[[時間]]を表すものとしては、
512 [CODE(HTMLa)@en[[[http-equiv]]]] [[属性]]が [CODE(HTTP)@en[[[Refresh]]]]
513 の場合の [CODE(HTMLa)@en[[[content]]]] [[属性値]]の書式 ([[秒]]数を指定) があります。
514
515 以前の [[HTML5]] 案には [CODE(HTMLe)@en[[[audio]]]] [[要素]]や [CODE(HTMLe)@en[[[video]]]] [[要素]]に[[媒体]]中の[[時間]]的位置を表す[[内容属性]]がありましたが、
516 既に削除されています。
517 [[秒]]数を返す [[DOM属性]]は削除されずに残っています。
518
519
520 [83] [CITE@en[(X)HTML5 Tracking]]
521 ([TIME[2009-08-23 10:09:22 +09:00]] 版)
522 <http://html5.org/tools/web-apps-tracker?from=2380&to=2381>
523
524 [84] [CITE@en[(X)HTML5 Tracking]]
525 ([TIME[2009-08-23 10:11:22 +09:00]] 版)
526 <http://html5.org/tools/web-apps-tracker?from=2381&to=2382>
527
528 [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>
529
530 @@ [86] >>85 の変更分を反映する
531
532 [87] [CITE@en[(X)HTML5 Tracking]]
533 ([TIME[2009-10-25 11:25:22 +09:00]] 版)
534 <http://html5.org/tools/web-apps-tracker?from=4317&to=4318>
535
536 [88] [CITE@en[Web Applications 1.0 r6235 Define the serialisation requirments for type=datetime.]]
537 ( ([TIME[2011-06-16 08:13:00 +09:00]] 版))
538 <http://html5.org/tools/web-apps-tracker?from=6234&to=6235>
539
540 * メモ
541
542 [89] [CITE[Basic Data Types and Interfaces – SVG 1.1 (Second Edition)]]
543 ( ([TIME[2011-08-10 12:35:27 +09:00]] 版))
544 <http://www.w3.org/TR/2011/REC-SVG11-20110816/types.html#DataTypeTime>
545
546
547 [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.]]
548 ( ([TIME[2012-01-12 08:14:00 +09:00]] 版))
549 <http://html5.org/tools/web-apps-tracker?from=6891&to=6892>
550
551 [91] [CITE['''['''whatwg''']''' Time Parsing]]
552 ([TIME[2012-01-12 09:07:23 +09:00]] 版)
553 <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-January/034344.html>
554
555 [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.]]
556 ( ([TIME[2012-01-12 09:03:00 +09:00]] 版))
557 <http://html5.org/tools/web-apps-tracker?from=6892&to=6893>

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24