この記事ではPHPの日付ライブラリである「Carbon」について、基本的な使い方を紹介します。
Carbonとは
Carbonとは、PHPの日付と時刻操作のためのライブラリです。
DateTimeクラスを継承したクラスです。
<?php
namespace Carbon;
class Carbon extends \DateTime
{
}
Carbonを使うことで簡単に日付の取得、計算、判定、比較などを行うことができます。
Webアプリケーションでは日付を取り扱うことがほぼ必須であるかと思うので、Carbonはよく使います。
Carbonの導入方法
Carbonの導入方法を紹介します。
PHPに導入する
標準のPHPには含まれていないのでcomposerを使用して導入することが推奨されています。
composerを使ってCarbonを導入するコマンドは以下になります。
composer require nesbot/carbon
このコマンドを作業ディレクトリ配下で実行していください。
するとCarbonを利用するにあたって必要なディレクトリが追加されます。
続いてCarbonを実際に利用するためには対象ファイルで以下コードを追加します。
<?php
require 'vendor/autoload.php';
use Carbon\Carbon;
これでCarbonを実際に利用できるようになります。
詳しい使い方はこの後の章で解説します。
Laravelで導入する
PHPで有名なフレームワークであるLaravelでは初期でCarbonが導入されています。
そのためcomposerでのコマンドの実行は不要です。
<?php
use Carbon\Carbon;
利用するPHPファイル内にてuseで宣言することで利用できるようになります。
タイムゾーンが日本時間になっていない場合
Carbonで取得した日時が日本時間になっていない場合は、以下を確認すると良いです。
- php.iniのタイムゾーンが「‘Asia/Tokyo‘」になっているか
「date.timezone=”Asia/Tokyo”」に設定する - config/app.phpのタイムゾーンが「‘Asia/Tokyo’」になっているか
「’timezone’ => ‘Asia/Tokyo’」に設定する
これで日本時間が取得できるようになるかと思います。
Carbonのインスタンスを定義する
ここから実際のCarbonの使い方を紹介していきます。
まずは基本的なところから、Carbonのインスタンスの定義方法です。
この後の日付の取得や計算、比較を扱うためにもCarbonインスタンスを定義しておく必要があります。
「new Carbon」で作成
まずは「new Carbon」で作成する方法です。
$now = new Carbon();
echo $now;
// 2023-10-19 09:25:57
こうすることで現在の日時を取得することができます。
引数に日時を入れることでその日のインスタンスも作成可能です。
$datetime = new Carbon('2023-10-19 09:30:00');
echo $datetime;
// 2023-10-19 09:30:00
「Carbon::parse()」で作成
続いては「Carbon::parse()」で作成する方法です。
こちらは引数が入ることが前提です。
$datetime = Carbon::parse('2023-10-19 20:30:00');
echo $datetime;
// 2023-10-19 20:30:00
今日、昨日、明日のインスタンスの作成
続いては「今日、昨日、明日」のインスタンスの作成方法です。
$today = Carbon::today();
echo $today;
// 2023-10-19 00:00:00
$yesterday = Carbon::yesterday();
echo $yesterday;
// 2023-10-18 00:00:00
$tomorrow = Carbon::tomorrow();
echo $tomorrow;
// 2023-10-20 00:00:00
簡単に作成することができます。
時間に関しては共通して「00:00:00」になります。
いくつかインスタンスの作成方法がありますので都度利用する際の目的によって使い分けると良いです。
Carbon::parse()の引数には要注意
Carbon::parse()の引数にはきちんと日付を入れるようにしましょう。
もしnullが入ってしまうと、現在時刻、つまりCarbon::now()と同じインスタンスが生成されます。
なぜ現在時刻になってしまうのか、気になる方は以下記事を参考にしてみてください。
Carbon::parse()の中身のコードを解説しています。
使用する際は、引数に入れる値がnullになっていないかのチェックをしてから入れるようにしましょう。
Carbonで日付の計算
インスタンスの作成の流れは紹介できたので続いてはそのインタンスを用いて日付の計算をする方法を紹介します。
具体的には加算・減算です。
まずは加算から。
$now = new Carbon();
echo $now; // 2023-10-20 08:27:09
// 1秒後
echo $now->addSecond();
// 2023-10-20 08:27:10
// 1分後
echo $now->addSecond();
// 2023-10-20 08:28:10
// 1時間後
echo $now->addHour();
// 2023-10-20 09:28:10
// 1日後
echo $now->addDay();
// 2023-10-21 09:28:10
// 1ヶ月後
echo $now->addMonth();
// 2023-11-21 09:28:10
// 1年後
echo $now->addYear();
// 2024-11-21 09:28:10
// 3秒後
echo $now->addSeconds(3);
// 2024-11-21 09:28:13
// 3分後
echo $now->addMinutes(3);
// 2024-11-21 09:31:13
// 3時間後
echo $now->addHours(3);
// 2024-11-21 12:31:13
// 3日後
echo $now->addDays(3);
// 2024-11-24 12:31:13
// 3ヶ月後
echo $now->addMonths(3);
// 2025-02-24 12:31:13
// 3年後
echo $now->addYears(3);
// 2028-02-24 12:31:13
みてもらうとわかるように「秒、時間、日、月、年」ごとにそれぞれ加算することができます。
それぞれの引数を指定しないと、デフォルトで「1」が加算されます。
「s」を加えることで引数の数字をそれぞれ加算してくれます。
続いては減算です。
$now = new Carbon();
echo $now; // 2023-10-20 08:31:00
// 1秒前
echo $now->subSecond();
// 2023-10-20 08:30:59
// 1分前
echo $now->subSecond();
// 2023-10-20 08:29:59
// 1時間前
echo $now->subHour();
// 2023-10-20 07:29:59
// 1日前
echo $now->subDay();
// 2023-10-19 07:29:59
// 1ヶ月前
echo $now->subMonth();
// 2023-09-19 07:29:59
// 1年前
echo $now->subYear();
// 2022-09-19 07:29:59
// 3秒前
echo $now->subSeconds(3);
// 2022-09-19 07:29:56
// 3分前
echo $now->subSeconds(3);
// 2022-09-19 07:26:56
// 3時間前
echo $now->subHour(3);
// 2022-09-19 04:26:56
// 3日前
echo $now->subDay(3);
// 2022-09-16 04:26:56
// 3ヶ月前
echo $now->subMonth(3);
// 2022-06-16 04:26:56
// 3年前
echo $now->subYear(3);
// 2019-06-16 04:26:56
加算で使っていた「add」の部分が「sub」に変わっただけです。
これで加算・減算ができます。
Carbonで2つの日付の差分を取得
続いては2つの日付の差分を取得する方法を紹介します。
$fistDt = Carbon::parse('2023-10-20');
$secondDt = Carbon::parse('2024-01-20');
// 秒
echo $fistDt->diffInSeconds($secondDt); // 7948800
// 分
echo $fistDt->diffInMinutes($secondDt); // 132480
// 時間
echo $fistDt->diffInMinutes($secondDt); // 2208
// 日
echo $fistDt->diffInDays($secondDt); // 92
// 週
echo $fistDt->diffInWeeks($secondDt); // 13
// 月
echo $fistDt->diffInMonths($secondDt); // 3
// 年
echo $fistDt->diffInYears($secondDt); // 0
このようにすることでそれぞれの単位での差分を取得することができます。
Carbonで2つの日付を比較
続いては2つの日付を比較する紹介します。
こちらに関しては、以下記事で詳しく解説していますので参考にしてみてください。
Carbonを使って日付の比較を行う方法【Laravel】【PHP】
isoFormat()で表示方法をカスタマイズ
最後に紹介するのは日付の表示方法を指定する「isoFormat()」について紹介します。
使い方はこのようになります。
$now = Carbon::now();
echo $now->isoFormat('YYYY/MM/DD HH:mm');
// 2023/10/21 14:38
isoFormat()は日付や時刻をISO 8601形式のフォーマットで表示するものです。
引数には表示したい情報を表示したいフォーマットで代入します。
Carbonを使いこなして効率的に日付を扱う
いかがだったでしょうか。
Carbonを使うことで効率的に日付を扱うことができます。
日付処理はWebアプリではほぼ必須です。
開発のスピードも効率も上がるのでこの機会にこんな使い方ができるんだくらい理解しておくと良いかと思います!
エンジニアにおすすめ書籍
エンジニアになりたて、これから勉強を深めていきたいという方におすすめの書籍はこちら!