html5で新たに追加された要素にtime要素があります。

当ブログでもせっかくhtml5を使用しているので、投稿日時にtime要素を利用したいと思って、調べてみましたので、メモ代わりに投稿します。

time要素

time要素はグレゴリオ暦における正確な日時を表すのに使用するもので、次のような使い方ができます。

<time class="dtstart" datetime="2009-11-03">
11月3日
</time>

上の例では年月日までの記述ですが、もちろんこれ以外にも、時刻やタイムゾーンを表示することも可能です。

<time class="dtstart" datetime="2009-11-03T02:09:41+09:00">
11月3日
</time>

このtime要素ですが、日時を表すものに何でもつければいいというわけではないようです。例えば、西暦年だけの記述に使うのはあまり意味がないとされていますし、難しいところでは、W3Cのドラフトに以下のような説明があります。

The time element is not intended for encoding times for which a precise date or time cannot be established. For example, it would be inappropriate for encoding times like “one millisecond after the big bang”, “the early part of the Jurassic period”, or “a winter around 250 BCE”.

For dates before the introduction of the Gregorian calendar, authors are encouraged to not use the time element, or else to be very careful about converting dates and times from the period to the Gregorian calendar. This is complicated by the manner in which the Gregorian calendar was phased in, which occurred at different times in different countries, ranging from partway through the 16th century all the way to early in the 20th.

訳すと次のようになります。

time要素は正確な日時が確立されない時間をエンコードするのは意図されていない。例えば、「ビッグバンの1ミリ秒後」や「ジュラ紀の初期」、あるいは「紀元250年頃の冬」といった時間をエンコードするのには不適切である。

グレゴリオ暦の採用以前の日付で、著者はTime要素を使わないようにするべきだし、そうでなければ、その時代からグレゴリオ暦へ日時を変換するということをとても注意深く行うべきだ。これが面倒なのは、グレゴリオ暦が16世紀中から20世紀初期に至るまで、異なる国で異なる時に、段階的に導入されたことによるものだ。

より詳しい説明は『W3C Working Draft』か、英語が苦手な人は羽田野 太巳氏が翻訳されている『time要素 – テキストレベルの意味づけ – HTML要素 – HTML5タグリファレンス – HTML5.JP』を読んで欲しいのですが、このような事情から、少なくともグレゴリオ暦採用以前の日時については使わない方がいいと思われますし、時間があやふやなことに関しては使用が難しいといえます。ある程度、期間が特定できる場合などに使うという意味では、やはりスケジュール管理やきちんとした記録文書などに使用されることが想定されているといえます。

WordPressでtime要素を使う

以上のようなことから考えて、当ブログ内での日付全てに関してtime要素を使えるかどうか見るのも大変ですし、とりあえず、ブログ記事とコメントの投稿日時だけに限定してtime要素を利用することにしました。

当ブログの場合、例えば、記事の投稿日時をテンプレートに以下のように記述していました。

<p class="ameta">投稿日:
<span><?php the_time(__('F jS, Y', 'kubrick')) ?>
 by <?php the_author() ?>
 </span></p>

デフォルトのテンプレートでは以下のように記述されていると思います。

<small>
<?php the_time(__('F jS, Y', 'kubrick')) ?>
 by <?php the_author() ?>
 </small>

WordPressのFormatting Date and Timeによると、「PHPマニュアルのdate(日付・時刻)関数の引数はそのままWordPressにも用いることが出来ます」ということなので、上のコードにに次のようにtime要素を挿入します。

<p class="ameta">投稿日:
<time datetime="<?php the_time('c'); ?>">
<?php the_time(__('F jS, Y', 'kubrick')) ?>
by <?php the_author() ?>
</time>
</p>

<small>
<time datetime="<?php the_time('c'); ?>">
<?php the_time(__('F jS, Y', 'kubrick')) ?></time>
by <?php the_author() ?>
</small>

加えて、『W3C 2009年8月25日版 HTML5ドラフトからの変更点 ? pubdateコンテンツ属性など』によると以前はarticle要素に定義されていたpubdate属性が廃止され、代わりにtime要素に定義されたということですので、投稿日時に関してはpubdate属性を次のように記述しておきます。

<p class="ameta">投稿日:
<time datetime="<?php the_time('c'); ?>
" pubdate="pubdate">
<?php the_time(__('F jS, Y', 'kubrick')) ?>
by <?php the_author() ?>
</time>
</p>

<small>
<time datetime="
<?php the_time('c'); ?>" pubdate="pubdate">
<?php the_time(__('F jS, Y', 'kubrick')) ?></time> by <?php the_author() ?>
</small>

これで次のように出力されるはずです。

<p class="ameta">投稿日:
<time datetime="2009-10-30T02:09:41+09:00" pubdate="pubdate">
2009年10月30日
</time>
</p>