メインとなるカレンダーのクラス(Calendarのサブクラス)はすべて共通APIを共有しています(共通のクラスメソッド)。あるクラスでは細かなバリエーションがありますが、一度、なにが利用できるかを知ってしまえば、直感的に理解し、容易に思い出すことができるでしょう。このセクションでは共通のメソッドを要約し、このバリエーションを強調します。詳しい情報はAPIのドキュメントをみてください。
データクラスのコンストラクターは日付の数値を引数にとります。年のはじまり(左側)から秒(右側)までです。これはあなたの利用するクラスに依存します。たとえば;
|
すべての日付とtabularの日付のクラスは抽象基本クラスのCalendarで定義されたメソッドを共有しています(Among these are methods for an object of any of these classes to identify itself (what's it's date is) and the previous and next dates.)。これらのクラスのオブジェクトのためのメソッドにはオブジェクト自体を識別するメソッドや以前の日付、次の日付を識別するメソッドがあります。例;
|
$Day I can find out not just about the day itself but also the month (or year/hour/minute/second). Notice also how prevDay() returned 30, taking care of working out that the previous day is in September for you. this***(), prev***() と next***() メソッドが年、月、日、時、分、秒のそれぞれにあります。
Calling any of these methods and passing the value TRUE will result in a timestamp being returned (タイムスタンプの形式は使用しているカレンダーエンジンによります - see the FAQ), 例;
|
| 警告 |
prev***()とnext***()からはじまるメソッドは使用しているカレンダーオブジェクトのカレントなものとの相対的な値を計算して返します。上記の例では、次の日(2003年10月2日)の日と月の値を得たいなら、nextDay()を呼びだして、nextMonth()を呼び出すことで、10月ではなく11月2日の値を得ることができます。 nextDay()を引数TRUEで呼ぶ代わりに、取得することのできる次の日からタイムスタンプを得ることができます。次へ/前へのリンクを作成することを助けるように設計されたCalendar_Decorator_Uriを見てください。 |
thisWeek(), prevWeek() および nextWeek()といったメソッドもあります。これらのメソッドはCalendar_Weekのインスタンスを利用した場合のみ利用すことができます。返される値のフォーマットは'timestamp', 'n_in_month', 'n_in_year' or 'array'の中から選択することができます。'n_in_month'を選択した場合に、月のはじまりか終わりになってしまった場合にはNULL値が返されることに注意してください。
最後になりますが、すべてのカレンダーオブジェクトはgetTimeStamp() と setTimeStamp()メソッドを提供します。前者はあなたが利用しているカレンダーエンジンのフォーマットでのタイムスタンプを返します(例えば、もしデフォルトのUnixタイムエンジンを使用しているなら、Unix形式のYYYY-MM-DD HH:MM:SSというフォーマットのタイムスタンプです)。後者はカレンダーオブジェクトが構築した値を変換するのに用いたタイムスタンプを除外します。
すべての日付とtabularの日付のクラスはデータオブジェクトの子供を作るためのbuild()メソッドを持っています。たとえば、Calendar_Monthは月の"子供"の存在であるCalendar_Dayオブジェクトをビルドします。
一度、build()が呼び出されると、子供は単純なfetch()イテレータを使用して日付オブジェクトから取り出すことができます。例えば;
|
もしあなたがこのようなイテレータを好まず、独自のものを使用したいと望むなら、単純に子供をfetchAll()メソッド(子供の日付のオブジェクトのインデックス化された配列が返されます)で取り出し、size()で得た数をチェックすることができます。fetchAll()で返されるのはインデックスの配列であることに注意してください。Calendar_Year, Calendar_Month, Calendar_Month_Weekdays, Calendar_Month_Weeks そして Calendar_Weekではインデックスの最初の値は1です。一方で、Calendar_Day, Calendar_Hour, Calendar_Minute そして Calendar_Secondではインデックスの最初の値は0です。なぜでしょうか?次のような表記をかんがえてみてください。 2003-1-1 00:00:00 ...
Note: Calendar_Second::build() doesn't do anything - it has no children.
カレンダーのレンダリングを簡単にするために、build()メソッドは子供のオブジェクトと比較する日付オブジェクトの配列のインデックスを受け取ることができます(どの日付のオブジェクトやtabular日付のオブジェクトでも利用することができます)。オブジェクトが子とマッチする場合は、isSelected()メソッド(どんな日付やtabularな日付オブジェクトも利用できます)がTRUEを返すことを意味しています。例えば;
|
The objects you pass to build()によって作成した子供とマッチするオブジェクトは子供とreplaceすることができます(i.e. ここでマッチするなら、あなたのオブジェクトを受け取ります)。このことでうまくCalendar_Decoratorを拡張したあなたのオブジェクトをループの中に"inject"することができます。
Note:Calendar_Year::build()メソッドは2番目の引数に週のはじまりの曜日をとります(上記のコンストラクタの記述を参照してください)。
Calendar_Dayクラスは3つの独自のメソッドを持っています。これらのメソッドは他のクラスにはありません。これらは純粋にtabularカレンダーを作成するために用いられます。isEmpty()は日にちが空白かどうかを判断するために用いられます(FAQの空白の日にちの説明を参照してください)。isFirst() と isLast()は週のはじまりとおわりを区別するために使用されます。
あなたがこれらのメソッドを使用する必要があるかどうかは、日付けオブジェクトを構築するするのにどのクラスを使用したかによります。もし、日付オブジェクトがCalendar_Month_Weekdaysによって構築されたのなら、これら3つのメソッドのどれもを利用することができます(もし空の日付があり、Calendar_Month_Weekdaysで完全な月を作成し、それぞれの週のはじまりとおわりが区切られていた場合、isFirst() と isLast()によって判断することができます)。Calendar_Weekによって日付が作られれたなら、isEmpty()メソッドだけが利用できます(月の最初と最後の週だけが空白の日付を含みます)。他の方法で日付オブジェクトが作成された場合、isEmpty(), isFirst() と isLast()は無意味です。
すべての日付オブジェクトとtabularオブジェクト(週を除く)はそれ自体をvalidateすることができます。デフォルトではどのような引数もコンストラクタに渡すことができますが、isValid()メソッドを用いて日付をvalidateすることができます。例えば;
|
|
|
日付をvalidateするというよりもadjust()メソッドを使って日付を自動的に調整するほうがよいことに注意してください。
|
ここでは、Decoratorクラスによって提供されるものを除くPEAR::Calendarで利用できるすべてのメソッドを要約しました。