-
Notifications
You must be signed in to change notification settings - Fork 4
/
794.txt
123 lines (90 loc) · 4.66 KB
/
794.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
[2] [DFN[[RUBYB[時間]@en[duration]]]]は、[[秒]]の数です [SRC[>>1]]。
* 仕様書
[REFS[
- [1] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-05-05 21:57:42 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#concept-duration>
]REFS]
* 意味
[3] [[時間]]は、[[秒]]の数を表しています [SRC[>>1]]。構文上は[[秒]]のみならず、
[[分]]、[[時]]、[[日]]、[[週]]単位でも記述できます。しかし[[月]]の長さは変化しますから、
[[月]]や[[年]]では記述できません [SRC[>>1]]。
* 構文
[4] [DFN[[RUBYB[[[妥当な時間文字列]]]@en[valid duration string]]]]とは、 >>21 と >>24
のいずれかの[[文字列]]です [SRC[>>1]]。
** ISO 8601 ベースの時間形式
[21] [[ISO 8601]] ベースの形式は、次のようなものです [SRC[>>1]]。
[FIG[
= [5] [CODE[[[P]]]]
= [6] [[日]]の数
== [7] [[ASCII数字]]1桁以上
== [8] [CODE[[[D]]]]
= [9] [[時]]以下
== [10] [CODE[[[T]]]]
== [11] [[時]]の数
=== [12] [[ASCII数字]]1桁以上
=== [13] [CODE[[[H]]]]
== [14] [[分]]の数
=== [15] [[ASCII数字]]1桁以上
=== [16] [CODE[[[M]]]]
== [17] [[秒]]
=== [18] [[ASCII数字]]1桁以上
=== [19] 省略可能: [CODE[[[.]]]] のあと [[ASCII数字]]1桁以上
=== [20] [CODE[[[S]]]]
]FIG]
[22] >>6 と >>9 は、どちらかまたは両方が必要です [SRC[>>1]]。
[23] >>11、>>14、>>17 は、1つ以上が必要です [SRC[>>1]]。
[25] 全体としては、各部分が表す[[時間]]の[[和]]を表します。
** HTML 独自の時間形式
[24] [[HTML]] 独自の形式は、[[時間時刻部品]]を1つ以上連ねたものです。
ただし[[時間時刻部品スケール]]は異なったものでなければなりません。順序は問いません。 [SRC[>>1]]
全体としては、各部品が表す[[時間]]の[[和]]を表します。
[26] [DFN[[RUBYB[[[時間時刻部品]]]@en[duration time component]]]]とは、
次のような[[文字列]]です [SRC[>>1]]。
[FIG[
= [27] [[空白文字]]0文字以上
= [28] [[ASCII数字]]1桁以上
= [29] 省略可能: [CODE[[[.]]]] のあと[[ASCII数字]]1~3桁
= [30] [[空白文字]]0文字以上
= [31] [[時間時刻部品スケール]]
= [32] [[空白文字]]0文字以上
]FIG]
[33] ただし >>29 は >>31 が[[秒]]単位の場合だけ使えます [SRC[>1]]。
[34] [DFN[[RUBYB[[[時間時刻部品スケール]]]@en[duration time component scale]]]]は次のいずれかです [SRC[>>1]]。
,[[文字]],意味,スケール
,[CODE[[[W]]]],[[週]],604800
,[CODE[[[D]]]],[[日]],86400
,[CODE[[[H]]]],[[時]],3600
,[CODE[[[M]]]],[[分]],60
,[CODE[[[S]]]],[[秒]],1
[35] >>34 の[[文字]]は[[ASCII大文字・小文字不区別]]です [SRC[>>1]]。
* 構文解析
[36] [DFN[[RUBYB[[[時間文字列を構文解析]]]@en[parse a duration string]]]]するには、
次のようにします [SRC[>>1]]。
[37] 与えられた[[文字列]]が次の[[正規表現]]に[[一致]]するか調べます。
[PRE(regexp code)[
\s*
P?
(?:
T \s*
|
[0-9]+ \s* [YyWwDdHhMmSs] \s*
|
[0-9]+\.[0-9]+ \s* [Ss] \s*
|
\.[0-9]+ \s* [Ss] \s*
)+
]PRE]
[38] ここで [CODE(regexp)[[[\s]]]] は、 [[HTML]] における[[空白文字]]を表します。
[39] 「M」は、「P」や「Y」の後なら[[月]]と解釈し、それ以外なら[[分]]と解釈します。
[41] 「Y」は[[年]]と解釈します。
[42] 「W」、「D」、「H」、「S」は >>34 の通り解釈します。
[40] [[数字]]と[[小数点]]は[[十進数]]として解釈します。直後の[[文字]]を[[単位]]とする[[時間]]として解釈します。
[43] >>37 に[[一致]]しない場合、[[数字]]を含まない場合、[[年]]や[[月]]が含まれる場合は、
失敗を返します。それ以外の場合は、個々の部分で表される[[時間]]の[[和]]を返します。
;; [44] これにより >>21 と >>24 のどちらも解釈できます。どちらにも一致しない文字列も解釈できることがあります。
[45] >>3 のような理由で[[月]]や[[年]]を単位とすることはできませんが、
この構文解析の方法は将来の拡張や ([[HTML]] 以外での) [[ISO 8601]] 形式の誤解釈を防ぐため、
[[月]]や[[年]]にも対応しています (が[[年]]や[[月]]を含んでいると、失敗します)。
* 関連
[46] [[HTML]] では[[媒体要素]]のための [CODE[12:34]] のような[[時間形式]]もありましたが、
実装されずに削除されています。
[47] [CODE(HTTP)@en[[[Refresh]]]] では[[秒]]単位の[[整数]]が使われています。