どの言語でも日付や時刻の処理をかっちり行うには苦心するものですね。

当記事では日時処理で苦労しない PHP の便利な日付系ライブラリ Carbon をご紹介いたします。

Carbon とは

Carbon
https://carbon.nesbot.com/

A simple PHP API extension for DateTime.

Carbon とは、シンプルな PHP DateTime クラスのラッパーライブラリです。

PHP フレームワークの Laravel にも組み込まれており、人気のあるライブラリと言えます。
すでに実績があり枯れ始めているライブラリです。

使用例

昨日・今日・明日、そして今

  • 昨日
1Carbon::yesterday();
2
  • 今日
1Carbon::today();
2
  • 明日
1Carbon::yesterday();
2

これらは、対象日付の 「0時 0分 0秒」 を指します。

  • 現在時刻
1Carbon::now();
2

たとえば、今から 24 時間後は次のようにします。

1$datetime = Carbon::now();
2$datetime->addHours(24);
3
4// こちらも同義
5$datetime = Carbon::now();
6$datetime->addDay();
7

日付などを指定してオブジェクトを生成する

次のように、多様な表現が可能です。

1new Carbon('2017-11-17');
2
3Carbon::create(2017, 1, 1, 0, 0, 0);
4
5Carbon::parse('2017-01-10 15:00:00');
6

タイムスタンプ

  • オブジェクトからタイムスタンプを得る
1$timestamp = Carbon::now()->timestamp;
2
  • タイムスタンプからインスタンスを生成する
1Carbon::createFromTimestamp($timestamp)
2

日付・時間・その他

  • フォーマット指定
1Carbon::now()->format('Y-m-d H:i:s');
2
  • Date と Time にそれぞれアクセスする
1$datetime = Carbon::now();
2$datetime->year;
3$datetime->month;
4$datetime->dat;
5$datetime->hour;
6$datetime->minute;
7$datetime->secound;
8
1$datetime = Carbon::now();
2
3// その月のなかで何週目か
4$datetime->weekOfMonth;
5
6// その年の中で何週目か
7$datetime->weekOfYear;
8
  • 月の日数
1Carbon::now()->daysInMonth;
2

「1月なら 31」が得られ、たとえば末日もかんたんに調べられます。

比較

  • 過去か未来か
1$datetime = new Carbon();
2$datetime->isPast());
3$datetime->isFuture());
4
  • 日付の比較
 1$datetime_1 = new Carbon('2018-01-01');
 2$datetime_2 = new Carbon('2020-01-01');
 3
 4$datetime_1->eq($datetime_2); // false
 5
 6// より大きい
 7$datetime_1->gt($datetime_2); // false
 8
 9// より小さい
10$datetime_1->lt($datetime_2); // true
11

テストでも活躍

setTestNow() というメソッドが提供されており、日付を据え置いてテストすることが可能です。

1Carbon::setTestNow(Carbon::parse('2017-01-10'));
2

プロジェクトが案外長く続いちゃって、急に日付周りでテストがコケちゃった、という心配が不要です。
これって便利ですよね。

導入方法

PHP バージョン

1.x is compatible with PHP 5.3+.
2.x version requires PHP 7.1.8+.
https://carbon.nesbot.com/ より引用

1 系は PHP 5.3 以上
2 系は PHP 7.1.8 以上です。

Composer で一発インストール

Carbon は Composer でかんたんにインストールが可能です。

1$ composer require nesbot/carbon

各 PHP ファイルでは次のように呼び出すことができます。

1<?php
2require 'vendor/autoload.php';
3
4use Carbon\Carbon;
5
6printf("Now: %s", Carbon::now());
7
なお、公式サイトには「昔ながらのライブラリを直接配置する」方法も掲載されています。

おわりに

Carbon は直感的に操作でき、齟齬の少ない良いライブラリです。

日付時刻処理はつまづきが多いのですが、Carbon ならツマラナイ不具合を減らすことができるはずです。

ちなみに Mac を Carbon 調にしたらかっこよすぎます。

[全31色] wraplus for 旧型 MacBook Pro Retina 13 インチ [ブラックカーボン] スキンシール (Late2012 ~ Early2015)

旧型 MacBook Pro Retina 13インチ(Late2012 ~ Early2015)専用のスキンシールです。対応モデル:A1502 / A1425(MacBookの底面に印字されているモデル番号をご確認ください。) 【Quality】設計から生産まで、全てを日本国内で行うことで高い品質を実現しました。粘着面のエア抜き構造により、貼付けの際に気泡が残りません。 【Fit】薄さ0.2mmのスキンシールが機器本体にしっかりとフィットし、本来のデザインや軽さ薄さを損なうことなく傷から守ります。 【Design】豊富な種類の中から、自分好みのデザインをお選びいただけます。触り心地にこだわり、本物のような質感を再現しています。 注意事項:本製品は機器に貼りつけるシールタイプの商品です。商品画像内の機器本体は付属いたしません。トラックパッド部分に本製品を貼るとタッチ感度が低下しますので、お好みに応じてご使用ください。スキンシールの貼付け作業時にドライヤーを利用する箇所がございます。

Amazonで詳細を見る

この記事の著者 Webrow (うぇぶろう)
Web アプリ開発、 Web 顧問 エンジニア、WordPress サポートいたします。