66
68

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【php】日付操作ライブラリCarbonを使ってみよう

Last updated at Posted at 2016-07-16

第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

を忘れずに。

index.php
<?php
require __DIR__ . "/../vendor/autoload.php";

use Carbon\Carbon;

使ってみる【超基本】

現在時刻の表示

index.php
echo Carbon::now(); // 2016-06-16 09:52:03

タイムゾーンを指定するときは

index.php
echo Carbon::now('Asia/Tokyo');

日付のみ表示

index.php
echo Carbon::now()->toDateString(); // 2016-06-16

フォーマットを変える

index.php
echo Carbon::now()->format(今日はY年m月d日だよ!’); // 今日は2016年06月16日だよ!

日付を作る

index.php
echo Carbon::create(2000, 12, 12, 10, 20, 30); // 2000-12-12 10:20:30

使ってみる【ちょっと実用的】

実際は「今」以外も必要になることはザラにあるので、変数にすると便利です。

index.php
$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

足し算(引き算)

  • 引き算は addsub に変える
  • 複数足したい場合は addDays(5) のようにする(間違ってaddDay(5)でも大丈夫です)
index.php
$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 に足していくとどんどん上書きされていくので
状況に応じて下のようにコピーすることも忘れずに。

index.php
$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つの日付で比較)

index.php
$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の間にある?

index,php
$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を使う。
第一引数にフォーマット、第二引数に書式を変えたいやつを入れる。

index.php
// $event["started_at"]は「2016-01-01T20:00:00+09:00~」とする
Carbon::createFromFormat(DateTime::ATOM,$event["started_at"])

使ってみる【曜日を日本語で出力】

index.php
setlocale(LC_ALL, 'ja_JP.UTF-8');
Carbon::createFromFormat(DateTime::ATOM,$event["started_at"])->formatLocalized('%m/%d(%a)');

参考

66
68
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
66
68

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?