time 要素

4.5.11 time 要素

カテゴリー:
フロー・コンテント
フレージング・コンテント
パルパブル・コンテント
この要素を使うことができるコンテキスト:
フレージング・コンテントが期待される場所
コンテントモデル:
フレージング・コンテント
コンテント属性:
グローバル属性
datetime - マシン可読な値
text/html におけるタグの省略:
どちらのタグも省略できません。
指定可能な ARIA role 属性 の値:
あらゆるロールの値
指定可能な ARIA ステートとプロパティ属性:
グローバル aria-* 属性
許可ロールに該当する aria-* 属性
DOM インタフェース:
interface HTMLTimeElement : HTMLElement {
           attribute DOMString dateTime;
};

time 要素は、そのコンテンツを表しますが、datetime 属性を使って、そのコンテンツをマシン可読にした形式を入れることができます。コンテンツは、日付、時刻、タイムゾーンオフセット、時間など、後述する種類に限られます。

datetime 属性を入れることができますが、もし入れるなら、その値は、この要素のコンテンツをマシン可読な形式で表したものでなければいけません。

datetime コンテント属性を持たない time 要素は、子孫に要素を一切入れてはいけません。

time 要素の日時値は、この要素に datetime コンテンツ属性があれば、その値となり、なければ、この要素の textContent となります。

time 要素の日時値は、次の構文のひとつに一致しなければいけません。

妥当な月文字列
<time>2011-11</time>
妥当な日付文字列
<time>2011-11-12</time>
妥当な西暦なし日付文字列
<time>11-12</time>
妥当な時刻文字列
<time>14:54</time>
<time>14:54:39</time>
<time>14:54:39.929</time>
妥当な浮動日時文字列
<time>2011-11-12T14:54</time>
<time>2011-11-12T14:54:39</time>
<time>2011-11-12T14:54:39.929</time>
<time>2011-11-12 14:54</time>
<time>2011-11-12 14:54:39</time>
<time>2011-11-12 14:54:39.929</time>

タイムゾーンオフセットがない日付を伴う日時は、どのタイムゾーンでも 1 日の中で特定の同じ時刻となるイベントを指定するのに役立ちます。たとえば、2020 年の新年は、すべてのタイムゾーンで正確に同じ瞬間ではなく、それぞれのタイムゾーンごとの 2020-01-01 00:00 に祝います。ビデオ会議のように、すべてのタイムゾーンで正確に同じ時刻に発生するイベントは、妥当なグローバル日時文字列のほうが便利でしょう。

妥当なタイムゾーンオフセット文字列
<time>Z</time>
<time>+0000</time>
<time>+00:00</time>
<time>-0800</time>
<time>-08:00</time>

日付を伴わない時刻(または、複数の日付で繰り返されるイベントを参照する時刻)には、通常は、タイムゾーンオフセットを指定するより、時刻を左右する地理的位置を指定するほうが便利です。なぜなら、地理的位置は、夏時間を伴うタイムゾーンオフセットを変えてくれるからです。場合によっては、地理的位置はタイムゾーンさえも変えます。たとえば、これはタイムゾーンの境界が引き直されるときが該当しますが、2011 年の終わりにサモア諸島で起こりました。タイムゾーンの境界や、それぞれのゾーンでどの規則が適用されるのかを記したタイムゾーンデータベースが存在します。これはタイムゾーンデータベースとして知られています。 [TZDATABASE]

妥当なグローバル日時文字列
<time>2011-11-12T14:54Z</time>
<time>2011-11-12T14:54:39Z</time>
<time>2011-11-12T14:54:39.929Z</time>
<time>2011-11-12T14:54+0000</time>
<time>2011-11-12T14:54:39+0000</time>
<time>2011-11-12T14:54:39.929+0000</time>
<time>2011-11-12T14:54+00:00</time>
<time>2011-11-12T14:54:39+00:00</time>
<time>2011-11-12T14:54:39.929+00:00</time>
<time>2011-11-12T06:54-0800</time>
<time>2011-11-12T06:54:39-0800</time>
<time>2011-11-12T06:54:39.929-0800</time>
<time>2011-11-12T06:54-08:00</time>
<time>2011-11-12T06:54:39-08:00</time>
<time>2011-11-12T06:54:39.929-08:00</time>
<time>2011-11-12 14:54Z</time>
<time>2011-11-12 14:54:39Z</time>
<time>2011-11-12 14:54:39.929Z</time>
<time>2011-11-12 14:54+0000</time>
<time>2011-11-12 14:54:39+0000</time>
<time>2011-11-12 14:54:39.929+0000</time>
<time>2011-11-12 14:54+00:00</time>
<time>2011-11-12 14:54:39+00:00</time>
<time>2011-11-12 14:54:39.929+00:00</time>
<time>2011-11-12 06:54-0800</time>
<time>2011-11-12 06:54:39-0800</time>
<time>2011-11-12 06:54:39.929-0800</time>
<time>2011-11-12 06:54-08:00</time>
<time>2011-11-12 06:54:39-08:00</time>
<time>2011-11-12 06:54:39.929-08:00</time>

日付とタイムゾーンオフセットを伴う時刻は、特定のイベントを指定したり、時刻が特定の地理的位置を基準にしないバーチャルのイベントを繰り返したりする場合に便利です。たとえば、小惑星衝突の正確な時刻や、毎日 1400 UTC に開催される定例の会議です。これなら、世界の特定のどの場所でも、そのローカルのタイムゾーンが夏時間になるのかそうでないのか、関係がありません。指定の地理的位置のローカルのタイムゾーンオフセットによって正確な時刻が変わるイベントには、その地理的位置を組み合わせた妥当な浮動日時文字列のほうが便利でしょう。

妥当な週文字列
<time>2011-W46</time>
4 桁以上の ASCII 数値, "0" (U+0030) でない数値が少なくとも 1 つ
<time>2011</time>
<time>0001</time>
妥当な時間文字列
<time>PT4H18M3S</time>
<time>4h 18m 3s</time>

前述の多くの妥当構文が表す日付および時刻の値は "浮動" です (それらはタイムゾーンオフセットを含みません) 。注意が必要なのは、浮動時刻の値とグローバル ("1 ずつ増えていく") 時刻の値 (JavaScript の Date オブジェクト) とを相互に変換する場合です。多くの場合に、暗黙的な時計時刻とタイムゾーンが変換に使われ、予期せぬ違いを生む結果になるかもしれません。 [TIMEZONES]

この要素のコンテンツのマシン可読相当は、該当の要素の日時値から次のアルゴリズムを使って取得されなければいけません:

  1. この要素の日時値から月文字列をパースしてが返ってきたら、それがマシン可読相当になります。これらの手順を中止します。

  2. この要素の日時値から日付文字列をパースして日付が返ってきたら、それがマシン可読相当になります。これらの手順を中止します。.

  3. この要素の日時値から西暦なし日付文字列をパースして西暦なし日付が返ってきたら、それがマシン可読相当になります。これらの手順を中止します。

  4. この要素の日時値から時刻文字列をパースして時刻が返ってきたら、それがマシン可読相当になります。これらの手順を中止します。

  5. この要素の日時値から浮動日時文字列をパースして浮動日時が返ってきたら、それがマシン可読相当になります。これらの手順を中止します。

  6. この要素の日時値からタイムゾーンオフセット文字列をパースしてタイムゾーンオフセットが返ってきたら、それがマシン可読相当になります。これらの手順を中止します。

  7. この要素の日時値からグローバル日時文字列をパースしてグローバル日時が返ってきたら、それがマシン可読相当になります。これらの手順を中止します。

  8. この要素の日時値から週文字列をパースしてが返ってきたら、それがマシン可読相当になります。これらの手順を中止します。

  9. この要素の日時値ASCII 数字の範囲の文字だけで構成され、"0" (U+0030) でない文字が少なくとも 1 つあれば、マシン可読相当は、その数字を 10 進法で解釈したものとなり、それが西暦を表します。これらの手順を中止します。

  10. この要素の日時値から時間文字列をパースして時間が返ってきたら、それがマシン可読相当になります。これらの手順を中止します。

  11. マシン可読相当はありません。

上記で参照されたアルゴリズムは、意図的に任意の文字列 s を想定して設計されており、これらのアルゴリズムの一つだけが値を返します。もっと効率的なアプローチによって、一度の引き渡しでこれらすべてのデータのタイプをパースできる単一のアルゴリズムがあるのかもしれません。そういったアルゴリズムの開発は、読者の練習として委ねることにします。

dateTime IDL 属性は、datetime コンテント属性を反映しなければいけません。

たとえばマイクロフォーマットで、time 要素を使って日付をエンコードすることができます。次は、標準ではない方式で hCalendar 使っています。time 要素を使ってイベントをエンコードする仮想的な方法を示しています:

<div class="vevent">
 <a class="url" href="http://www.web2con.com/">http://www.web2con.com/</a>
  <span class="summary">Web 2.0 カンファレンス</span>:
  <time class="dtstart" datetime="2005-10-05">10月5日</time> -
  <time class="dtend" datetime="2005-10-07">7日</time>,
  <span class="location">アージェントホテル, サンフランシスコ, カルフォルニア州</span> にて
 </div>

ここでは、Atom の語彙に基づいた架空のマイクロデータの語彙が、ブログ投稿の発行日をマークアップするために、time 要素とともに使われています。

<article itemscope itemtype="http://n.example.org/rfc4287">
 <h1 itemprop="title">大きな任務</h1>
 <footer>発行日 <time itemprop="published" datetime="2009-08-29">2日前</time>。</footer>
 <p itemprop="content">今日、私は外出して、我が子のために自転車を買いました。</p>
</article>

この例では、別の記事の発行日が time を使ってマークアップされていますが、今度は、schema.org のマイクロデータの語彙を使っています:

<article itemscope itemtype="http://schema.org/BlogPosting">
 <h1 itemprop="headline">小さな任務</h1>
 <footer>発行日 <time itemprop="datePublished" datetime="2009-08-30">昨日</time>。</footer>
 <p itemprop="articleBody">私は彼の自転車にベルを取り付けました。</p>
</article>

次の例では、time 要素が ISO8601 形式の日付をエンコードするために使われています。後にスクリプトで処理されます:

<p>私達の初めてのデートは <time datetime="2006-09-23">日曜日</time>でした。</p>

次の例では、その値に時刻が入れられています:

<p>私達のおしゃべりが終ったのは <time datetime="2006-09-24T05:00-07:00">翌朝の5時</time>でした。</p>

ページによってロードされたスクリプト(ゆえに、time 要素を使った日付と時刻のマークアップのページ内部の慣例が分かっている)は、ページ全体をスキャンして、すべての time 要素を見て、日付と時刻のインデックスを作ることができるでしょう:

たとえば、この要素は、"火曜日" という文字列を伝えますが、2011 年 11 月の 12 日がその "火曜日" に相当することを表すセマンティクスを伴います:

今日は<time datetime="2011-11-12">火曜日</time>です。

この例では、太平洋標準時刻のタイムゾーンでの特定の時刻が指定されています:

次のミーティングは<time datetime="2011-11-12T15:00-08:00">午後3時</time>です。

※ 原文:http://www.w3.org/TR/2014/REC-html5-20141028/text-level-semantics.html#the-time-element