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