DT に関するいろいろ
今回は, 自作の時間操作用クラスライブラリ (PHP の Datetime クラスの高機能版のようなもの) の紹介をします.
以下は現在開発中の PEACH ver.2 での書き方ですが, ver.1 系でもクラス名が違うくらいで内容はほとんど同じです.
フィールドの取得
こんな感じで, 時間オブジェクトの get メソッドの引数に文字列を指定することで任意のフィールドの値を取得することができます.
<?php require_once("/path/to/PEACH2/src/autoload.php"); use Peach\DT\Timestamp; $t = Timestamp::now(); var_dump($t->get("year")); var_dump($t->get("month")); var_dump($t->get("date")); var_dump($t->get("hour")); var_dump($t->get("minute")); var_dump($t->get("second"));
出力
int(2014) int(8) int(19) int(21) int(40) int(50)
時間の操作
月初・月末・日付や時刻の加減などの操作もかなり直感的!
<?php require_once("/path/to/PEACH2/src/autoload.php"); use Peach\DT\Timestamp; $now = Timestamp::now(); $first = $now->set("date", 1); // 今月の 1 日 $last = $now->set("date", $now->getDateCount()); // 今月の末日 var_dump($first->format()); var_dump($last->format());
出力
string(19) "2014-08-01 21:40:50" string(19) "2014-08-31 21:40:50"
比較
比較のためのメソッドとして before(), after(), equals() などああります. Java の Calendar クラスと同じような使い勝手です.
<?php require_once("/path/to/PEACH2/src/autoload.php"); use Peach\DT\Timestamp; $t1 = new Timestamp(2014, 8, 19, 20, 30, 40); // 8 月 19 日 20:30:40 $t2 = new Timestamp(2014, 7, 31, 12, 34, 56); // 7 月 31 日 12:34:56 var_dump($t1->after($t2)); var_dump($t1->before($t2));
出力
bool(true) bool(false)
日付だけを比較したい!
とある 2 つの時刻について, 日付が同じかどうかだけ調べたいという需要はよくあると思うのですが (少なくとも自分は過去に何度かあった), DT モジュールでは Date クラスにキャストすることで簡単に調べることができます.
<?php require_once("/path/to/PEACH2/src/autoload.php"); use Peach\DT\Timestamp; $t1 = new Timestamp(2014, 8, 19, 20, 30, 40); // 8 月 19 日 20:30:40 $t2 = new Timestamp(2014, 7, 31, 12, 34, 56); // 7 月 31 日 12:34:56 $t3 = new Timestamp(2014, 8, 19, 21, 0, 0); // 8 月 19 日 21:00:00 var_dump($t1->toDate()->equals($t2->toDate())); var_dump($t1->toDate()->equals($t3->toDate()));
出力
bool(false) bool(true)
PEACH ライブラリの近況
自作の汎用 PHP クラスライブラリ "PEACH" がリリースされてから早くも 2 ヶ月が経ちました. (詳細はこちら: http://trashtoy.github.io/peach/ )
ver 1.0.0 は対象を PHP 5.1.1 以上としていて, さすがにもうレガシーすぎるだろうということで, ver 1.0.0 のリリース後すぐに PHP 5.3.0 以上を対象とした ver 2.0.0 の作成を進めていました. もうそろそろリリースできそうです.
今後は 1 系と 2 系のコードを同時並行で保守していくことになりそうです.
PEACH を構成する各ライブラリのうち, DT (Date and Time) モジュールに関する説明をこのブログ上でほとんどしてこなかったので, 今日から少しずつ書いていこうという経緯で今回これを書きました.
まだまだ紹介したいことはたくさんあるので, 近いうちにまた別のサンプルを掲載したいと思います.