第34回関西PHP勉強会で登壇した内容です。
テクテク関西というブログには資料も上げてますのでよければ。
#Carbon
- PHPのDateTimeクラスを継承して拡張された日時操作ライブラリ
- 英語圏の時刻表記とかもしてくれる(8/10/2016みたいに日本とは順番が違うのでちょっと面倒)
- Laravelには標準搭載
- 直接ダウンロードかComposerでインストール可能
#インストール
今回はcomposerを使ってインストール。
まずはサンプルとして新規作成したディレクトリcarbonTest
内に移動して、
$ composer require nesbot/carbon
するとディレクトリ内に
- composer.json
- composer.lock
- vendor
ができました。
ディレクトリ構成はこんな感じ。
carbonTest/
├ public
│ └ index.php
│
├ composer.json
├ composer.lock
└ vendor/
├ composer
├ symfony
└ nesbot
└ carbon
自分でつくったpublic/index.phpに実際のコードを書いていきます。
#準備
-
require
でautoload.phpを読み込み - use宣言で
Carbon
を忘れずに。
<?php
require __DIR__ . "/../vendor/autoload.php";
use Carbon\Carbon;
#使ってみる【超基本】
##現在時刻の表示
echo Carbon::now(); // 2016-06-16 09:52:03
タイムゾーンを指定するときは
echo Carbon::now('Asia/Tokyo');
##日付のみ表示
echo Carbon::now()->toDateString(); // 2016-06-16
##フォーマットを変える
echo Carbon::now()->format(‘今日はY年m月d日だよ!’); // 今日は2016年06月16日だよ!
##日付を作る
echo Carbon::create(2000, 12, 12, 10, 20, 30); // 2000-12-12 10:20:30
#使ってみる【ちょっと実用的】
実際は「今」以外も必要になることはザラにあるので、変数にすると便利です。
$today = Carbon::now();
echo $today; // 2016-06-16 09:52:03
$dt = Carbon::create(2000, 12, 12, 10, 20, 30);
echo $dt; // 2000-12-12 10:20:30
##足し算(引き算)
- 引き算は
add
をsub
に変える - 複数足したい場合は
addDays(5)
のようにする(間違ってaddDay(5)
でも大丈夫です)
$dt = Carbon::create(2000, 12, 12, 10, 20, 30);
echo $dt->addDay(); //2000-12-13 10:20:30
echo $dt->addWeek(); //2000-12-20 10:20:30
echo $dt->addMonth(); //2000-01-20 10:20:30
echo $dt->addYear(); //2001-01-20 10:20:30
echo $dt->addHour(); //2001-01-20 11:20:30
echo $dt->addMinute(); //2001-01-20 11:21:30
echo $dt->addSecond(); //2001-01-20 11:21:31
###注意点
上の例を見ればわかるように、$dt
に足していくとどんどん上書きされていくので
状況に応じて下のようにコピーすることも忘れずに。
$dt = Carbon::create(2000, 12, 12, 10, 20, 30);
echo $dt->copy()->addDay(); //2000-12-13 10:20:30
echo $dt->copy()->addWeek(); //2000-12-19 10:20:30
echo $dt->copy()->addMonth(); //2000-01-12 10:20:30
echo $dt->copy()->addYear(); //2001-12-12 10:20:30
echo $dt->copy()->addHour(); //2001-12-12 11:20:30
echo $dt->copy()->addMinute(); //2001-12-12 11:21:30
echo $dt->copy()->addSecond(); //2001-12-12 11:21:31
#使ってみる【日付検索とかに使えそうなやつ】
##$dt1は$dt2・・・(2つの日付で比較)
$dt1 = Carbon::create(2000, 8, 12);
$dt2 = Carbon::create(2000, 12, 12);
「といっしょ」 var_dump($dt1->eq($dt2)); // false
「より大きい」 var_dump($dt1->gt($dt2)); // false
「以上」 var_dump($dt1->gte($dt2)); // false
「より小さい」 var_dump($dt1->lt($dt2)); // true
「以下」 var_dump($dt1->lte($dt2)); // true
##$dt3は$dt1と$dt2の間にある?
$dt1 = Carbon::create(2000, 8, 12);
$dt2 = Carbon::create(2000, 12, 12);
$dt3 = Carbon::create(2000, 10, 12);
var_dump($dt3->between($dt1, $dt2)); // true
#使ってみる【既存の日付をこねこねする】
##Carbon::createFromFormatで書式を変える。
書式を変えるDateTimeを使う。
第一引数にフォーマット、第二引数に書式を変えたいやつを入れる。
// $event["started_at"]は「2016-01-01T20:00:00+09:00~」とする
Carbon::createFromFormat(DateTime::ATOM,$event["started_at"])
#使ってみる【曜日を日本語で出力】
setlocale(LC_ALL, 'ja_JP.UTF-8');
Carbon::createFromFormat(DateTime::ATOM,$event["started_at"])->formatLocalized('%m/%d(%a)');
#参考