DT

基本的な使用方法

Author : trashtoy

Table of Contents

時間オブジェクトとは

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

時間操作メソッド

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

  1. $d new Peach_DT_Date(2012521);
  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(2012521);
  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(2012521);            // 2012-05-21
  2. $d2 new Peach_DT_Datetime(2012521730)// 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(201211),
  3.     new Peach_DT_Datetime(20121123210),
  4.     new Peach_DT_Date(20121123),
  5.     new Peach_DT_Timestamp(2012831123456),
  6.     new Peach_DT_Datetime(2012531020),
  7.     new Peach_DT_Timestamp(201233112233)
  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(201251);
  2. $d2 new Peach_DT_Date(2012331);
  3.  
  4. var_dump($d1->after($d2));  // bool(true)
  5. var_dump($d1->before($d2))// bool(false)

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

  1. $d1 new Peach_DT_Date(2012521);
  2. $d2 new Peach_DT_Timestamp(2012521000;
  3.  
  4. var_dump($d1->after($d2));  // bool(false)
  5. var_dump($d1->before($d2))// bool(true)