vevent 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。

文字意味スケール
W週604800
D日86400
H時3600
M分60
S秒1

[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>