parse a duration string

時間 (HTML)

[2] 時間 (duration) は、の数です >>1

仕様書

意味

[3] 時間は、の数を表しています >>1。構文上はのみならず、 単位でも記述できます。しかしの長さは変化しますから、 では記述できません >>1

妥当な時間文字列

[4] 妥当な時間文字列 (valid duration string) とは、 >>21>>24 のいずれかの文字列です >>1

HTML 独自の時間形式

[24] HTML 独自の形式は、時間時刻部品を1つ以上連ねたものです。 ただし時間時刻部品スケールは異なったものでなければなりません。順序は問いません。 >>1 全体としては、各部品が表す時間を表します。

[26] 時間時刻部品 (duration time component) とは、 次のような文字列です >>1

  1. [27] 空白文字0文字以上
  2. [28] ASCII数字1桁以上
  3. [29] 省略可能: . のあとASCII数字1~3桁
  4. [30] 空白文字0文字以上
  5. [31] 時間時刻部品スケール
  6. [32] 空白文字0文字以上

[33] ただし >>29>>31単位の場合だけ使えます >1

[34] 時間時刻部品スケール (duration time component scale) は次のいずれかです >>1

文字意味スケール
W604800
D86400
H3600
M60
S1

[35] >>34文字ASCII大文字・小文字不区別です >>1

ISO 8601 ベースの時間形式

[21] ISO 8601 ベースの形式は、次のようなものです >>1

  1. [5] P
  2. [6] の数
    1. [7] ASCII数字1桁以上
    2. [8] D
  3. [9] 以下
    1. [10] T
    2. [11] の数
      1. [12] ASCII数字1桁以上
      2. [13] H
    3. [14] の数
      1. [15] ASCII数字1桁以上
      2. [16] M
    4. [17]
      1. [18] ASCII数字1桁以上
      2. [19] 省略可能: . のあと ASCII数字1桁以上
      3. [20] S

[22] >>6>>9 は、どちらかまたは両方が必要です >>1

[23] >>11>>14>>17 は、1つ以上が必要です >>1

[25] 全体としては、各部分が表す時間を表します。

[75] 大文字でなければなりません。

vEvent 時間文字列

[52] 妥当なvEvent時間文字列 (valid vevent duration string) とは、 次のような文字列です >>51

  1. [53] P
  2. [54] の数
    1. [55] ASCII数字1桁以上
    2. [56] W
  3. [57] の数
    1. [58] ASCII数字1桁以上
    2. [59] D
  4. [60] 以下
    1. [61] T
    2. [62] の数
      1. [63] ASCII数字1桁以上
      2. [64] H
    3. [65] の数
      1. [66] ASCII数字1桁以上
      2. [67] M
    4. [68] の数
      1. [69] ASCII数字1桁以上
      2. [70] S

[71] ただし >>54 を指定した場合は >>57>>60 は使えません。 >>57>>60 は片方または両方を指定できます。 >>62>>65>>68 は1つ以上指定できますが、 >>62>>68 の2つだけの指定はできません。 >>51

[72] >>21 と比較すると、

[76] 大文字でなければなりません。

構文解析

[36] 時間文字列を構文解析 (parse a duration string) するには、 次のようにします >>1

[37] 与えられた文字列が次の正規表現一致するか調べます。

\s*
P?
(?:
  T \s*
    |
  [0-9]+ \s* [YyWwDdHhMmSs] \s*
    |
  [0-9]+\.[0-9]+ \s* [Ss] \s*
    |
  \.[0-9]+ \s* [Ss] \s*
)+

[38] ここで \s は、 HTML における空白文字を表します。

[39] 「M」は、「P」や「Y」の後ならと解釈し、それ以外ならと解釈します。

[41] 「Y」はと解釈します。

[42] 「W」、「D」、「H」、「S」は >>34 の通り解釈します。

[40] 数字小数点十進数として解釈します。直後の文字単位とする時間として解釈します。

[43] >>37一致しない場合、数字を含まない場合、が含まれる場合は、 失敗を返します。それ以外の場合は、個々の部分で表される時間を返します。

[44] これにより >>21>>24 のどちらも解釈できます。どちらにも一致しない文字列も解釈できることがあります。 例えば「T」が不適切な場所に混在していても、無視されます。 ISO 8601 ベースの形式にも空白文字を挿入できます。 「0Y」があっても失敗せずに無視されます。

[45] >>3 のような理由でを単位とすることはできませんが、 この構文解析の方法は将来の拡張や (HTML 以外での) ISO 8601 形式の誤解釈を防ぐため、 にも対応しています (がを含んでいると、失敗します)。

[73] これは >>4 のための構文解析法ですが、 >>52 にも適用できます。

文脈

[48] 妥当な時間文字列 (>>4) は、 time 要素で使われます。

[50] 妥当なvEvent時間文字列 (>>52) は、 vEvent マイクロデータduration の値として使われます >>47

[74] 妥当なvEvent時間文字列 (>>52) は、HTMLの時刻の範囲の形式にも使われます。

関連

[46] HTML では媒体要素のための 12:34 のような時間形式もありましたが、 実装されずに削除されています。

[47] Refresh では単位の整数が使われています。

[77] [at] (0) Introduce a vEvent vocabulary. (Hixie著, ) <https://github.com/whatwg/html/commit/425754254022e0ca969a77965cd71603f6bf5255>