time 要素

4.6.10 time 要素

カテゴリー
フロー・コンテンツ
フレージング・コンテンツ
この要素を使うことができるコンテキスト:
フレージング・コンテンツが期待される場所
コンテンツ・モデル:
フレージング・コンテンツ。ただし、子孫に time 要素を入れてはいけません。
コンテンツ属性:
グローバル属性
datetime
pubdate
DOMインタフェース:
interface HTMLTimeElement : HTMLElement {
           attribute DOMString dateTime;
           attribute boolean pubDate;
  readonly attribute Date valueAsDate;
};

time 要素は、24時間表記の時刻、新暦のグレゴリオ暦における正確な日付を表します。そして、その日付には、オプションで、時刻とタイムゾーンを加えることができます。[GREGORIAN]

この要素は、マシン可読となるよう最新の日時をエンコードする方法として考えられています。そうすることで、例えば、ユーザーエージェントは、誕生日のリマインダーや予定をスケジュール表に登録といったことが提供できるようになります。

time 要素は、正確な日時を確立できない時間をエンコードすることは想定されていません。例えば、"ビッグバンの1ミリ秒後", "ジュラ紀のはじめ", "紀元前250年あたりの冬" といった時間のエンコードには不適切です。

グレゴリオ歴導入前の日付に対しては、ウェブ制作者は、time 要素を使わないことが推奨されます。または、グレゴリオ歴の期間からの日時の変換について十分に注意を払うことが推奨されます。これは、グレゴリオ歴は国ごとに違うときに導入され、それが16世紀から20世紀はじめにいたる範囲に及んでいるからです。

pubdate 属性は論理属性です。指定すると、この要素によって与えられた日付と時刻は、最も直近の祖先にあたる article 要素の発行日時になります。祖先に article 要素がなければ、ドキュメント全体の発行日時となります。この要素に pubdate 属性が指定されると、この要素は日付を必要とます。それぞれの article 要素に対して、直近の祖先がその article 要素となる pubdate 属性を持った time 要素は 2 つ以上存在してはいけません。さらに、それぞれの Document に対して、祖先に article 要素を持たない pubdate 属性を持った time 要素は 2 つ以上存在してはいけません。

datetime 属性は、存在すれば、指定されている日付や時刻を与えます。なければ、日付と時刻は、この要素のコンテンツによって与えられます。

この要素が日付を必要とし、datetime 属性が存在していれば、この属性の値は、任意で時刻を伴う妥当な日付文字列でなければいけません。

この要素が日付を必要とし、datetime 属性が存在していなければ、この要素の textContent は、コンテンツにおける任意で時刻を伴う妥当な日付文字列でなければいけません。

この要素が日付を必要とせず、datetime 属性が存在していれば、この属性の値は、妥当な日時文字列でなければいけません。

この要素が日付を必要とせず、datetime 属性が存在していなければ、この要素の textContent は、コンテンツにおける妥当な日時文字列でなければいけません。

もし日付が存在すれば、グレゴリオ歴を使って表現されなければいけません。

datetime 属性が存在すれば、ユーザーエージェントは、この要素をレンダリングする際に、この属性の値をユーザーに伝えるべきです。

time 要素は、例えばマイクロフォーマットなどで、日付をエンコードするのに使います。次は、time 要素を使う hCalendar の亜種を使って、スケジュールをエンコードする架空の方法を示しています:

<div class="vevent">
 <a class="url" href="http://www.web2con.com/">http://www.web2con.com/</a>
  <span class="summary">Web 2.0 Conference</span>:
  <time class="dtstart" datetime="2007-10-05">October 5</time> -
  <time class="dtend" datetime="2007-10-20">19</time>,
  at the <span class="location">Argent Hotel, San Francisco, CA</span>
 </div>

(終了日は、この予定の最終日の 1 日後としてエンコードされています。なぜなら、iCalendar フォーマットにおける終了日は、排他的であり、包括的ではないからです。)

日時を表すのに time 要素が必要というわけではありません。次の例では、time 要素を使って時刻がエンコードされますが、それによって、その地域の慣例に合うように表記を変える(例:XBL2の利用)ことができるようになっています。一方で、西暦はまったくマークアップされていません。なぜなら、それをしてたとしても、特に役に立つわけではありませんし、そうすることは許されていません。

<p>I usually have a snack at <time>16:00</time>.</p>
<p>I've liked model trains since at least 1983.</p>

時刻の変換をサポートするスタイル技術を使って、上記の例の最初の段落を次の用に表示することができます:

I usually have a snack at 4pm.

または、次のように表示することもできます:

I usually have a snack at 16h00.

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

pubDate IDL 属性は、pubdateコンテンツ属性を反映しなければいけません。

ユーザーエージェントは、time 要素によって表された 日付, 時刻, タイムゾーン を取得するために、次の手順に従わなければいけません:

  1. datetime 属性があれば、その属性の値から得られるフラグ in attribute を使って日時文字列をパースするルールを適用します。そして、その結果を result とします。
  2. そうでなければ、その要素の textContent から得られるフラグ in content を使って日時文字列をパースするルールを適用します。そして、その結果を result とします。
  3. もし result が空なら(パースに失敗したときなど)、日付は unknown、時刻も unknown、そしてタイムゾーンも unknown となります。
  4. そうでなければ:もし result に日付が入っていれば、それが日付になります。もし result に時刻が入っていれば、それが時刻になります。そして result にタイムゾーンが入っていれば、それがその要素のタイムゾーンになります(日付と時刻の両方が存在する場合にのみタイムゾーンが存在することができます)。
time . valueAsDate

指定の日時を表す Date オブジェクトを返します。

valueAsDate IDL 属性は、null、もしくは、次のリストで定義された対応の値に新たに初期化された Date オブジェクトのいずれかを返さなければいけません:

日付は判明するが、時刻が判明しない場合
指定された日付の UTC 午前 0 時(つまり最初の秒)に相当する時間
時刻は判明するが、日付が判明しない場合
1970-01-01 の指定時刻に相当する時間。タイム・ゾーンは UTC。
日付時刻の両方が判明する場合
該当の日付時刻の指定のタイムゾーン・オフセットに相当する時間。
日付時刻も判明しない場合
null 値

Date オブジェクトが返されるときには、新規に生成されなければいけません。

次の抜粋では:

<p>Our first date was <time datetime="2006-09-23">a Saturday</time>.</p>

time 要素の valueAsDate 属性の値は、1,158,969,600,000ms になるでしょう。

次の抜粋では:

<p>Many people get up at <time>08:00</time>.</p>

time 要素の valueAsDate 属性の値は、28,800,000ms になるでしょう。

この例では、記事の発行日時が time 要素を使ってマークアップされています:

<article>
 <h1>Small tasks</h1>
 <footer>Published <time pubdate>2009-08-30</time>.</footer>
 <p>I put a bike bell on his bike.</p>
</article>

別の方法でマークアップすることもできるでしょう。この例では、古いユーザーエージェントは "今日" と言うでしょうが、新しいユーザーエージェントは、この属性の値に基づいて、地域に特化した形式で時間をレンダリングするでしょう。

<article>
 <h1>Small tasks</h1>
 <footer>Published <time pubdate datetime="2009-08-30">today</time>.</footer>
 <p>I put a bike bell on his bike.</p>
</article>

これも同じものですが、時間しか入れていません。この要素は空なので、古いユーザーエージェントは役に立つようなものは何も表示しないでしょう。一方で、この仕様を実装したユーザーエージェントは、地域に特化した形式で日時を表示するでしょう。

<article>
 <h1>Small tasks</h1>
 <footer>Published <time pubdate datetime="2009-08-30T07:13Z"></time>.</footer>
 <p>I put a bike bell on his bike.</p>
</article>

※ 原文:http://www.w3.org/TR/2011/WD-html5-20110525/text-level-semantics.html#the-time-element