Zend_Date API の概要Zend_Date の API はシンプルで統一性がありますが、 非常に柔軟で強力な設計になっており、 さまざまな操作や演算ができます。 Zend_Date のオプション日付の書式の型の選択いくつかのメソッドでは、PHP の date() 関数と似た形式の日付書式文字列を使用します。 PHP の日付書式指定子のほうが ISO 書式指定子よりなじみがあるという場合は、 Zend_Date::setOptions(array('format_type' => 'php')) とできます。こうすると、$format パラメータを持つすべての関数で PHP の日付書式指定子が使用できるようになります。 Zend_Date::setOptions(array('format_type' => 'iso')) とすると、デフォルトのモードに戻ります。このモードは、 ISO 日付書式トークンのみをサポートするものです。 サポートする書式コードの一覧は、 PHP の date() 関数の書式指定子を使用して 自分で定義する出力フォーマット を参照ください。 夏時間と月
日付を処理する際には、夏時間の適用前後をまたがってしまうこともあります。
通常は、そのような場合は結果が一時間増えたり減ったりします。
たとえば、夏時間の適用前の日付に何ヶ月か追加してその結果が夏時間適用後になった場合、
結果の日付は一時間ずれます。月末や月初の深夜 0 時のような境界上で、
それをまたがった月の加算を行うと、結果から 1 時間引かれることで
前月末日の日付になってしまい "off by 1" エラーが発生します。
このような状況になることを避けるためには、夏時間の変更を無視するためのオプション
Zend_Date
インスタンスの実際のタイムゾーンが UTC あるいは GMT の場合、
オプション 月の計算
ある日付に対して月を足したり引いたりすると、
もとの日付が月の最後のほうだった場合に予期せぬ結果となることがあります。
たとえば「1月31日」に一ヶ月足すことを考えてみましょう。
SQL に慣れている人なら、この結果は「2月28日」になるものと思われるでしょう。
一方、Excel や OpenOffice を使っている人は、この結果が「3月3日」
になるものと考えるのではないでしょうか。
この問題は、計算結果の月の日数が元の日付の月の日数より少ない場合に起こりえます。
Zend Framework の開発者向けには、どちらの方式かを選択できるようにしました。
日付の地域化や正規化の、Zend_Cache による高速化Zend_Date を高速に動作させるには Zend_Cache アダプタを使用します。これを使用すると、地域化したデータを扱う際の Zend_Date のすべてのメソッドが高速化します。 たとえば、定数 Zend_Date::DATE や Zend_Date::TIME を扱うメソッドは、すべてこの影響を受けます。 Zend_Cache アダプタを Zend_Date に設定するには、 Zend_Date::setOptions(array('cache' => $adapter)) とするだけです。 Zend_TimeSync による同期したタイムスタンプの取得通常は、サーバやコンピュータの時刻はそれぞれ異なります。 Zend_Date は、この問題を Zend_TimeSync で解決できます。 タイムサーバを Zend_Date::setOptions(array('timesync' => $timeserver)) で設定すると、すべての Zend_Date インスタンスについて、 そのタイムスタンプと実際のタイムスタンプを間のオフセットを設定します。 このオプションを使用しても、既存のインスタンスのタイムスタンプは変わりません。 そこで、これを用いる場合は起動ファイルで設定することをおすすめします。 日付の値の操作Zend_Date オブジェクトの作成によって入力が正規化されると、 このオブジェクトはタイムゾーンに関連付けられます。しかし、内部的な形式としては通常の » UNIX タイムスタンプを使用します。 各地域固有の方式で日付を表示するには、まずタイムゾーンを知る必要があります。 デフォルトのタイムゾーンは常に GMT/UTC です。オブジェクトのタイムゾーンを調べるには getTimeZone() を使用します。オブジェクトのタイムゾーンを変更するには setTimeZone() を使用します。 これらのオブジェクトに対するすべての操作は、このタイムゾーンを想定して行われます。 異なるタイムゾーンの日付オブジェクトを混在させないよう注意しましょう。 タイムスタンプにのみかかわる操作しかしないのならよいのですが、 それ以外の場合には期待通りの結果が得られなくなるでしょう。 異なるタイムゾーンの Zend_Date に対する操作は、 たいていの場合はうまく動作します。というのも Zend_Date のインスタンスを作成する際に、値が UNIX タイムスタンプに正規化されるからです。 ほとんどのメソッドで、引数 $part に定数を指定できます。 これにより、日付のどの部分を選択するかを指定します。この定数は、 たとえば Zend_Date::HOUR のようになります。 これらの定数は、以下のすべての関数で使用できます。使用可能なすべての定数の一覧は 全定数の一覧 にあります。 $part を省略した場合は、Zend_Date::TIMESTAMP が指定されたものとみなします。また、ユーザ定義の書式を $part で使用することもできます。ここには、 Zend_Locale_Format::getDate() と同様のコードを使用します。 日付オブジェクトが明らかに無効な値を用いて作成された場合 (たとえば月が 12 より大きいなど) は、 Zend_Date は例外をスローします。ただし、特定の日付フォーマットが指定されている場合、 つまり $part が NULL あるいは Zend_Date::DATES ("あいまいな" フォーマット) のいずれかである場合は別です。 Example #1 ユーザ定義の入力日付書式
オプションのパラメータ $locale を指定すると、
その $locale をもとに $date オペランドを解決します。
つまり、日付文字列に含まれる月名や曜日名などを、そのロケールにあわせて適切に解釈します
( Zend Framework 1.7.0 以降では、Zend_Date はアプリケーション単位でのロケールの使用にも対応します。 そのためには、Zend_Locale のインスタンスを以下のようにレジストリに登録します。 このようにすれば、同じロケールを何度も使用したいときに 各インスタンスで毎回ロケールを設定する手間を省けます。
多くの日付要素で共通に使用できる、Zend_Date の基本操作メソッド add(), sub(), compare(), get() および set() は、日付全般に対して使用できます。それぞれのメソッドは、 そのインスタンスが保持する日付の値を操作します。 これらのメソッドのうち、 get() 以外ではすべて $date オペランドが必要となります。 ここには Zend_Date のインスタンスか 数値文字列、あるいは整数値を指定します。 これらのメソッドで $date にオブジェクト以外を指定した場合、 それはタイムスタンプであるとみなされます。 しかし、$part オペランドを使用すると、 ふたつの日付データが日付のどの部分を表すものなのかを指定できます。 たとえば "年"、"分" などが指定できます。それだけではなく、 "December 31, 2007 23:59:59" のような長い形式の文字列も $date に指定できます。 compare() および get() 以外のメソッドは、処理の結果としてオブジェクト内の日付が変更されます。 Example #2 日付要素の操作
基本的な操作について、一般的な日付要素と組み合わせて使用する際に 便利なメソッドが用意されています。 これらのメソッドを使用すると、上で説明したメソッドのように 日付要素の定数 をいちいちタイプする必要がなくなります。 好都合なことに、これらのメソッドの名前は プレフィックス (基本操作の名前) とサフィックス (日付要素の名前) を組み合わせた形式、たとえば addYear() のようになっています。以下の一覧における、すべての "日付要素" と "基本操作" の組み合わせが存在します。 たとえば "add" は、各要素について addDay() や addYear() などといったメソッドが存在します。 これらの便利なメソッドの機能は、基本操作メソッドと同等です。 しかし、$date オペランドに文字列や整数値を使用する場合は、 メソッド名のサフィックスが指す日付要素以外を指定することはできません。 つまり、$date が文字列あるいは整数値の場合は、 $date オペランドの単位が メソッド名によって ("Year" や "Minute" などに) 決まるということです。 日付要素の一覧
日付操作の一覧便利なメソッド群ではなく以下の基本操作を使用する場合には、 適切な定数 を $part パラメータで指定します。
日付の比較以下の基本操作については、 Zend_Date API の概要 の一覧にある各日付要素に特化した便利なメソッドは存在しません。
日付および日付要素の取得Zend_Date インスタンスに関する情報の取得をサポートするメソッド群について説明します。
一秒未満の単位の扱いZend_Date インスタンスに関する情報の取得をサポートするメソッド群について説明します。
日の出 / 日の入りこれらの三つのメソッドにより、各地域に特化した太陽の情報を取得できます。 たとえば日の出や日の入りの時刻などが得られます。
|