Laravel4、Carbonの紹介なのだ。

Tags : Laravel4  

Laravelアドベントカレンダー11日目です。

10日目のmorisukeさんから引き続いて、愉快なおじさん、川瀬さんが再び登場です。(ああ、一人ではっちゃけて、その結果おいてきぼりさ。だから真面目に行くのだ。)

西から登ったおひさまが、ひがしーが辞める〜♫。というわけで、今日は天才カーボンです。

Laravelが依存しているパッケージの中でも、Carbonは使い方を知っていると便利です。既に取り込まれていますしね。

英語でも、Readmeの内容を見てもらえば、関数名などから、使い方は分かります。一番最初にサンプルとして提示されているコードをご覧ください。

printf("現在時刻は: %s", Carbon::now()->toDateTimeString());
printf("バンクーバーでの現在時刻は: is %s", Carbon::now('America/Vancouver'));  //暗黙に__toString()される
$tomorrow = Carbon::now()->addDay();
$lastWeek = Carbon::now()->subWeek();
$nextSummerOlympics = Carbon::createFromDate(2012)->addYears(4);

$officialDate = Carbon::now()->toRFC2822String();

$howOldAmI = Carbon::createFromDate(1975, 5, 21)->age;

$noonTodayLondonTime = Carbon::createFromTime(12, 0, 0, 'Europe/London');

$worldWillEnd = Carbon::createFromDate(2012, 12, 21, 'GMT');

// 本当に死にたくないでしょう、ですからnowをモック出来ます
Carbon::setTestNow(Carbon::createFromDate(2000, 1, 1));

// ちゃんとUTCで実行されているか比較
if (Carbon::now()->gte($worldWillEnd)) {
   die();
}

// やれやれ。通常の振る舞いに戻ろう。
Carbon::setTestNow();

if (Carbon::now()->isWeekend()) {
   echo 'パーティーだ!';
}
echo Carbon::now()->subMinutes(2)->diffForHumans(); // '2 minutes ago'と表示

// …付け加えて、さらに'from now', 'after', 'before'
// 時間に、seconds, minutes, hours, days, months, yearsも使えます。

$daysSinceEpoch = Carbon::createFromTimeStamp(0)->diffInDays();

要所を翻訳しましたが、メソッド名を見れば、何をしているかほぼ理解できます。。

多少、わかりづらいのがCarbon::setTestNow()ですね。これは現在時間を設定することができるテスト用のメソッドです。日付や時間が絡むテストはダミーで現在時間を抑える必要がありますが、Carbonでセットしておけば、それが他のCarbonメソッドで適用されるため、テストが非常にやりやすくなるというわけです。

解除するためには、引数に何も渡さず呼び出します。でも、テスト用の関数ですから、まず通常のコードで使用し、さらに解除することは無いでしょう。

インスタンスは日時を表すオブジェクトです。

$dt = new Carbon();
$dt = new Carbon()::now();
$dt = new Carbon('tomorrow');
$dt = new Carbon('next wednesday');
$dt = new Carbon('last friday');
$dt = new Carbon('this thursday');

もしくは記述的に作成することができます。

Carbon::create(2012, 9, 5, 23, 26, 11);
Carbon::parse('first day of December 2000');
Carbon::parse('first day of May 2000');

年月日、時分秒にはプロパティでアクセスできます。

$dt->year
$dt->month
$dt->day
$dt->hour
$dt->minute
$dt->second

こういう、情報も引き出せます。

$dt->dayOfWeek // 曜日を表す整数
$dt->dayOfYear // その年の何日目
$dt->weekOfYear // その年の何週目
$dt->daysInMonth // その月は何日あるか
$dt->timestamp // タイムスタンプ
$dt->age // 日付が誕生日の人が何歳か
$dt->quarter // 第n/4期目か

ここまでが基本、他にも足し引き、差を求める、週末などのチェック、文字列への変換など、全部揃っています。

長いので、さわりだけご紹介しました。

では、明日12日目はkorotoroさんが、公式キャラクターを作ります!利権を下さい!!既得権益に憧れているおじさんでした。