DT

基本的な使用方法

Author : trashtoy

Table of Contents

時間オブジェクトとは

特定の日付・時刻を指すインタフェース Peach_DT_Time の実装クラスのことを「時間オブジェクト」と呼びます. 時間オブジェクトには以下の種類があります.

時間操作メソッド

時間オブジェクトの各フィールドの値を得るには get メソッドを使用します.

  1. $d = new Peach_DT_Date(2012, 5, 21);
  2. var_dump($d->get("year"));     // int(2012)
  3. var_dump($d->get("month"));    // int(5)
  4. var_dump($d->get("date"));     // int(21)

時刻の計算方法 (特定のフィールドを足したり引いたりする) には add, set, setAll などの種類があります. これらのメソッドは新しい時間オブジェクトを返します. (既存の時間オブジェクトの内部状態は変化しません)

以下に使い方の例を挙げます.

  1. $d  = new Peach_DT_Date(2012, 5, 21);
  2.  
  3. $d1 = $d->add("date", 15);
  4. echo $d1; // 2012-06-05
  5.  
  6. $d2 = $d->add("month", -3);
  7. echo $d2; // 2012-02-21
  8.  
  9. $d3 = $d->set("year", 2000);
  10. echo $d3; // 2000-05-21
  11.  
  12. $d4 = $d->setAll(array("month" => 12, "date"  => 24));
  13. echo $d4; // 2012-12-24

フィールド指定方法

各メソッドの引数には "year", "month", "date", "hour", "minute", "second" などを指定します. 具体的には以下の規則に従って解釈されます. (大文字・小文字は区別しません)

  • 先頭が "Y" で始まる場合 : 年
  • 先頭が "MO" で始まる場合 : 月
  • 先頭が "D" で始まる場合 : 日
  • 先頭が "H" で始まる場合 : 時
  • 先頭が "M" で始まり, 直後に "O" が続かない場合 : 分
  • 先頭が "S" で始まる場合 : 秒

無効なフィールド名を指定した場合, その指定は無視されます.

例えば, 時・分・秒のフィールドを持たない Peach_DT_Date オブジェクトに対して, 引数に "hour" を指定して add メソッドを実行した場合, 元のオブジェクトと同じオブジェクトを返します.

get の引数に無効な引数を指定した場合は NULL が返ります.

  1. $d1 = new Peach_DT_Date(2012, 5, 21);            // 2012-05-21
  2. $d2 = new Peach_DT_Datetime(2012, 5, 21, 7, 30); // 2012-05-21 07:30
  3.  
  4. $d3 = $d1->set("hour", 10); // 無効な設定なので何も変化しない. $d1 == $d3 となる
  5. $d4 = $d2->set("hour", 10); // 2012-05-21 10:30 になる
  6.  
  7. var_dump($d1->get("hour")); // NULL
  8. var_dump($d2->get("hour")); // int(7)
  9. var_dump($d3->get("hour")); // NULL
  10. var_dump($d4->get("hour")); // int(10)

ソート・比較

時間オブジェクトの配列は, Peach_Util_Arrays::sort() を使って簡単にソートすることが出来ます. 以下に例を示します.

  1. $arr = array(
  2.     new Peach_DT_Date(2012, 1, 1),
  3.     new Peach_DT_Datetime(2012, 11, 23, 21, 0),
  4.     new Peach_DT_Date(2012, 11, 23),
  5.     new Peach_DT_Timestamp(2012, 8, 31, 12, 34, 56),
  6.     new Peach_DT_Datetime(2012, 5, 3, 10, 20),
  7.     new Peach_DT_Timestamp(2012, 3, 3, 11, 22, 33)
  8. );
  9.  
  10. $arr2 = Peach_Util_Arrays::sort($arr);
  11. foreach ($arr2 as $d) {
  12.     echo $d->format() . "\n";
  13. }

このコードは以下を出力します.

        2012-01-01
        2012-03-03 11:22:33
        2012-05-03 10:20
        2012-08-31 12:34:56
        2012-11-23
        2012-11-23 21:00
                    

before(), after() を使って時間オブジェクト同士の比較をすることができます.

  1. $d1 = new Peach_DT_Date(2012, 5, 1);
  2. $d2 = new Peach_DT_Date(2012, 3, 31);
  3.  
  4. var_dump($d1->after($d2));  // bool(true)
  5. var_dump($d1->before($d2)); // bool(false)

異なる型の時間オブジェクト同士も比較することができますが, もしも共通するフィールドがすべて等しい場合は, 上位の型のほうが「後」とみなされることに注意してください.

  1. $d1 = new Peach_DT_Date(2012, 5, 21);
  2. $d2 = new Peach_DT_Timestamp(2012, 5, 21, 0, 0, 0;
  3.  
  4. var_dump($d1->after($d2));  // bool(false)
  5. var_dump($d1->before($d2)); // bool(true)