Zend_Date
コンポーネントは、
日付や時刻を操作するための、きめ細かくシンプルな API を提供します。
このメソッドを使用すると、日付の各部分を含めた広範囲の情報を扱えます。
さまざまな機能がもたらす可能性は、PHP
の既存の日付関連の関数をはるかに上回っています。
最新のマニュアルは、
オンライン版
(Subversion の更新と同期しています)
を参照ください。
シンプルに扱えることを目標とはしていますが、
各地域の日付や時刻を操作 (変更や合成、比較など)
する際にはある程度複雑になってしまうことは避けられません。
日付や時刻は、地域によって表記方法が異なることがよくあります。
たとえば、カレンダーの日付を表す際にまず月が最初にくるところもあれば、
年が最初にくるところもあります。
地域の処理および正規化についての詳細は、
Zend_Locale
を参照ください。
Zend_Date
は、多くの言語における月名の短縮表記に対応しています。
Zend_Locale
は、タイムスタンプにおける各地域の月名や曜日名に対応しており、
それを他の地域での表記に変換することもできます。
日付関連の関数を PHP や Zend Framework で使う前には、
まずアプリケーションにデフォルトタイムゾーンが設定されているかどうかを確認しましょう。
これは、環境変数 TZ で指定するか、あるいは php.ini の設定
date.timezone
か
date_default_timezone_set()
を使用して行います。
PHP では、日付や時刻関連の関数が特定のユーザに対して動作するようにするには
デフォルトのタイムゾーンを設定します。
タイムゾーン設定の完全な一覧は、
CLDR Timezone Identifier List
を参照ください。
例 8.1. デフォルトタイムゾーンの設定
<?php date_default_timezone_set('America/Los_Angeles'); // カリフォルニアのアメリカ人用のタイムゾーン date_default_timezone_set('Europe/Berlin'); // ドイツのドイツ人用のタイムゾーン ?>
Zend_Date のインスタンスを作成すると、 そのタイムゾーンは自動的に現在のデフォルトタイムゾーンになります! したがって、そのタイムゾーン設定は夏時間も事実上考慮したものになるでしょう。 明示的に夏時間を指定する必要はありません。
Zend_Date
が提供する機能は次のとおりで、これは
PHP の日付関数群を拡張したものです。
シンプルな API
Zend_Date
の提供する API は非常にシンプルです。
これは、四つのプログラミング言語の日付/時刻関連機能から、
いいところを抜き出してまとめたものです。
たとえば、二つの時刻を加算したり比較したりすることは一行でできてしまいます。
完全な国際化
月名や曜日名とその短縮形について、130 以上の言語をサポートしています。 メソッドの入力や出力で、これらの各地域の月名、曜日名を使用することができます。
制約のないタイムスタンプ
PHP 5.2 のドキュメントでは "タイムスタンプの有効範囲は、通常は
Fri, 13 Dec 1901 20:45:54 GMT から Tue, 19 Jan 2038 03:14:07 GMT までです"
と書かれていますが、Zend_Date
は
ほぼ無制限に近い範囲をサポートしています。これは、BCMath
拡張モジュールのおかげです。
BCMath が使用できない場合は、Zend_Date がサポートするタイムスタンプの範囲が制限され、
使用しているサーバの float
型で対応できる範囲のみとなります。
"float の大きさはプラットフォーム依存です。ただし、通常はおよそ 10
進数で 14 桁の精度があり、最大値は ~1.8e308 (これは 64ビット IEEE
フォーマットです) となります。" [
http://www.php.net/float
]
さらに、float 型そのものの特性により、計算結果に丸め誤差が生じる問題があります。
これを避けるため、ZF の i18n コンポーネントでは
もし BCMath 拡張モジュールが使用可能ならそれを使用するようにしています。
ISO_8601 日付仕様のサポート
ISO_8601 の日付仕様をサポートしています。
ISO_8601 の日付仕様の一部にのみ準拠しているものについても識別できます。
これらの日付書式は、データベースを使用する際に特に有用です。
たとえば、MsSQL と
MySQL
の日付書式は微妙に異なりますが、
Zend_Date
は、書式指定定数
Zend_Date::ISO_8601
によって両方ともサポートしています。
日付文字列が PHP の date() フォーマットトークンである
"Y/m/d" や "Y-m-d H:i:s" といった形式になる場合は、
Zend_Date が持つ ISO 8601 日付書式の組み込みサポートを使用します。
日の出、日の入り時刻の計算
任意の場所と日付に対する日の出、日の入り時刻を表示できます。 これにより、一秒たりとも無駄にすることなく お好みの PHP プロジェクトで作業できることでしょう (^o^)