LaravelとPHPでCarbonを使用して日時を管理する方法
序章
PHPでの日付と時刻の操作は複雑になる可能性があります。 私たちは対処しなければなりません strtotime
、フォーマットの問題、多くの計算など。
Carbon パッケージを使用すると、PHPでの日付と時刻の処理がはるかに簡単になり、よりセマンティックになり、コードがより読みやすく、保守しやすくなります。
Carbonは、PHP独自のDateTimeクラスを拡張するBrianNesbitによるパッケージです。
PHPで日付を処理するためのいくつかの優れた機能を提供します。 具体的には次のようなものです。
- タイムゾーンの処理。
- 現在の時刻を簡単に取得できます。
- 日時を読みやすいものに変換します。
- 英語のフレーズを日時に解析します(
"first day of January 2016"
). - 日付の加算と減算(
"+ 2 weeks"
,"-6 months"
). - 日付を扱うセマンティックな方法。
この記事では、Carbonをインストールし、Carbonが提供する機能について説明します。
前提条件
このガイドに従うには、次の前提条件を満たしている必要があります。
- 動作するLaravel開発環境。 これを設定するには、 Ubuntu20.04にLaravelアプリケーションをインストールして構成する方法に関するガイドに従ってください。
- または、Larvelインストールドキュメントに従ってください。 Laravel Sailアプローチを選択する場合は、Dockerが必要になります。
このチュートリアルは、PHP v8.0.5、Composer v2.0.13、MySQL 8.0.24、Laravel v8.40.0、およびCarbonv2.31で検証されました。
プロジェクトの設定
Carbonを使用するには、Carbonをからインポートする必要があります。 Carbon
名前空間。 幸いなことに、CarbonはすでにLaravelに含まれています。
Carbonを使用する必要があるときはいつでも、次のようにインポートできます。
<?php
use Carbon\Carbon;
インポートした後、Carbonが提供するものを調べてみましょう。
特定の日時を取得する
現在の時刻を取得します。
$current = Carbon::now();
現在の時刻は、このインスタンス化で取得することもできます。
$current2 = new Carbon();
今日の日付を取得します。
$today = Carbon::today();
昨日の日付を取得します。
$yesterday = Carbon::yesterday();
明日の日付を取得します。
$tomorrow = Carbon::tomorrow();
特定の文字列を解析します。
$newYear = new Carbon('first day of January 2016');
これは次を返します:
Output2016-01-01 00:00:00
これらのヘルパーは、次のような頻繁な日時のニーズに対して人間が読める形式のリクエストを提供します。 today()
, yesterday()
、 と tomorrow()
.
よりきめ細かい制御で日付を作成する
日付と時刻をすばやく定義する方法に加えて、Carbonでは特定の数の引数から日付と時刻を作成することもできます。
createFromDate()
受け入れる $year
, $month
, $day
, $tz
(タイムゾーン):
Carbon::createFromDate($year, $month, $day, $tz);
createFromTime()
受け入れる $hour
, $minute
, $second
、 と $tz
(タイムゾーン):
Carbon::createFromTime($hour, $minute, $second, $tz);
create()
受け入れる $year
, $month
, $day
, $hour
, $minute
, $second
, $tz
(タイムゾーン):
Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);
これらは、Carbonでは通常認識されない形式である種の日付または時刻を取得する場合に非常に役立ちます。 あなたが渡す場合 null
これらの属性のいずれについても、デフォルトでcurrentになります。
日付と時刻の操作
日付を操作するときに行う必要があるのは、日付と時刻を取得することだけではありません。 多くの場合、日付または時刻を操作する必要があります。
たとえば、ユーザーの試用期間を作成する場合、一定の時間が経過すると試用期間を終了する必要があります。 つまり、30日間の試用期間があるとしましょう。 その時間をCarbon’sで計算できます add
と subtract
.
この例では、 addDays()
試用期間がいつ終了するかを決定するには:
// get the current time
$current = Carbon::now();
// add 30 days to the current time
$trialExpires = $current->addDays(30);
カーボンドキュメントから、他のいくつかがここにあります add()
と sub()
私たちが利用できる方法。
2012年1月31日に設定された日付を考えてみましょう。
$dt = Carbon::create(2012, 1, 31, 0);
echo $dt->toDateTimeString();
これは戻ります:
Output2012-01-31 00:00:00
で日付を変更する addYears()
と subYears()
結果は次のようになります。
指示 | 出力 |
---|---|
echo $dt->addYear(); |
2012-01-31 00:00:00 |
echo $dt->addYears(5); |
2017-01-31 00:00:00 |
echo $dt->subYear(); |
2011-01-31 00:00:00 |
echo $dt->subYears(5); |
2007-01-31 00:00:00 |
で日付を変更する addMonths()
と subMonths()
結果は次のようになります。
指示 | 出力 |
---|---|
echo $dt->addMonth(); |
2012-03-03 00:00:00 |
echo $dt->addMonths(60); |
2017-01-31 00:00:00 |
echo $dt->subMonth(); |
2011-12-31 00:00:00 |
echo $dt->subMonths(60); |
2007-01-31 00:00:00 |
「1月31日」に1か月を追加すると、「2月28日」ではなく「3月3日」になることに注意してください。 そのロールオーバーを使用したくない場合は、次を使用できます。 addMonthWithoutOverflow()
.
で日付を変更する addDays()
と subDays()
結果は次のようになります。
指示 | 出力 |
---|---|
echo $dt->addDay(); |
2012-02-01 00:00:00 |
echo $dt->addDays(29); |
2012-02-29 00:00:00 |
echo $dt->subDay(); |
2012-01-30 00:00:00 |
echo $dt->subDays(29); |
2012-01-02 00:00:00 |
で日付を変更する addWeekdays()
と subWeekdays()
結果は次のようになります。
指示 | 出力 |
---|---|
echo $dt->addWeekday(); |
2012-02-01 00:00:00 |
echo $dt->addWeekdays(4); |
2012-02-06 00:00:00 |
echo $dt->subWeekday(); |
2012-01-30 00:00:00 |
echo $dt->subWeekdays(4); |
2012-01-25 00:00:00 |
で日付を変更する addWeeks()
と subWeeks()
結果は次のようになります。
指示 | 出力 |
---|---|
echo $dt->addWeek(); |
2012-02-07 00:00:00 |
echo $dt->addWeeks(3); |
2012-02-21 00:00:00 |
echo $dt->subWeek(); |
2012-01-24 00:00:00 |
echo $dt->subWeeks(3); |
2012-01-10 00:00:00 |
で日付を変更する addHours()
と subHours()
結果は次のようになります。
指示 | 出力 |
---|---|
echo $dt->addHour(); |
2012-01-31 01:00:00 |
echo $dt->addHours(24); |
2012-02-01 00:00:00 |
echo $dt->subHour(); |
2012-01-30 23:00:00 |
echo $dt->subHours(24); |
2012-01-30 00:00:00 |
で日付を変更する addMinutes()
と subMinutes()
結果は次のようになります。
指示 | 出力 |
---|---|
echo $dt->addMinute(); |
2012-01-31 00:01:00 |
echo $dt->addMinutes(61); |
2012-01-31 01:01:00 |
echo $dt->subMinute(); |
2012-01-30 23:59:00 |
echo $dt->subMinutes(61); |
2012-01-30 22:59:00 |
で日付を変更する addSeconds()
と subSeconds()
結果は次のようになります。
指示 | 出力 |
---|---|
echo $dt->addSecond(); |
2012-01-31 00:00:01 |
echo $dt->addSeconds(61); |
2012-01-31 00:01:01 |
echo $dt->subSecond(); |
2012-01-30 23:59:59 |
echo $dt->subSeconds(61); |
2012-01-30 23:58:59 |
カーボンの使用 add
と subtract
ツールは、調整された日付と時刻を提供できます。
ゲッターとセッターの使用
時間を読み取ったり操作したりする別の方法は、Carbonのゲッターとセッターを使用することです。
ゲッターで値を読み取ります。
$dt = Carbon::now();
var_dump($dt->year);
var_dump($dt->month);
var_dump($dt->day);
var_dump($dt->hour);
var_dump($dt->second);
var_dump($dt->dayOfWeek);
var_dump($dt->dayOfYear);
var_dump($dt->weekOfMonth);
var_dump($dt->daysInMonth);
セッターで値を変更します。
$dt = Carbon::now();
$dt->year = 2015;
$dt->month = 04;
$dt->day = 21;
$dt->hour = 22;
$dt->minute = 32;
$dt->second = 5;
echo $dt;
セッターをつなぐこともできます。
これが前の例です year()
, month()
, day()
, hour()
, minute()
、 と second()
:
$dt->year(2015)->month(4)->day(21)->hour(22)->minute(32)->second(5)->toDateTimeString();
そして、これはを使用した同じ例です setDate()
と setTime()
:
$dt->setDate(2015, 4, 21)->setTime(22, 32, 5)->toDateTimeString();
そして、これはを使用した同じ例です setDateTime()
:
$dt->setDateTime(2015, 4, 21, 22, 32, 5)->toDateTimeString();
これらのアプローチはすべて同じ結果になります。 2015-04-21 22:32:05
.
日付と時刻のフォーマット
PHPの toXXXString()
事前定義されたフォーマットで日付と時刻を表示するためのメソッドを使用できます。
指示 | 出力 |
---|---|
echo $dt->toDateString(); |
2015-04-21 |
echo $dt->toFormattedDateString(); |
2015年4月21日 |
echo $dt->toTimeString(); |
22:32:05 |
echo $dt->toDateTimeString(); |
2015-04-21 22:32:05 |
echo $dt->toDayDateTimeString(); |
2015年4月21日火曜日22:32 |
PHPを使用することも可能です DateTime
format()カスタムフォーマット用:
echo $dt->format('l jS \of F Y h:i:s A');
l
:曜日の完全なテキスト表現。jS
:- 先行ゼロのない月の日。
- 月の日の英語の序数接尾辞、2文字。
F
:月の完全なテキスト表現。Y
:年の完全な数値表現、4桁。h:i:s
:- 先行ゼロを含む1時間の12時間形式。
- 先行ゼロのある分。
- 先行ゼロのある秒。
A
:大文字のアンティメリディエムとポストメリディエム。
このコードは次の結果を生成します。
OutputTuesday 21st of April 2015 10:32:05 PM
Carbonのフォーマットツールを使用すると、ニーズに合わせて日付と時刻を表示できます。
相対時間の計算
カーボンはまた、私たちが比較的時間を表示することを可能にします diff()
メソッド。
たとえば、ブログがあり、公開時刻を表示したいとします。 3 hours ago
. これらの方法でそれを行うことができます。
違いを見つける
次の例で、将来の時間と過去の時間を考えてみましょう。
$dt = Carbon::create(2012, 1, 31, 0);
$future = Carbon::create(2012, 1, 31, 0);
$past = Carbon::create(2012, 1, 31, 0);
$future = $future->addHours(6);
$past = $past->subHours(6);
これが使用した結果です diffInHours()
:
指示 | 出力 |
---|---|
echo $dt->diffInHours($future); |
6 |
echo $dt->diffInHours($past); |
6 |
将来の日付と過去の日付を持つ次の例を考えてみましょう。
$dt = Carbon::create(2012, 1, 31, 0);
$future = Carbon::create(2012, 1, 31, 0);
$past = Carbon::create(2012, 1, 31, 0);
$future = $future->addMonth();
$past = $past->subMonths(2);
これが使用した結果です diffInDays()
:
指示 | 出力 |
---|---|
echo $dt->diffInDays($future); |
31 |
echo $dt->diffInDays($past); |
61 |
人間の違いを表示する
時間を比較的表示すると、日付やタイムスタンプよりも読者にとって便利な場合があります。
たとえば、次のような投稿の時間を表示する代わりに 8:12 AM
、時刻は次のように表示されます 3 hours ago
.
The diffForHumans()
メソッドは、差を計算し、それを人間が読める形式に変換するために使用されます。
将来の日付と過去の日付を持つ次の例を考えてみましょう。
$dt = Carbon::create(2012, 1, 31, 0);
$future = Carbon::create(2012, 1, 31, 0);
$past = Carbon::create(2012, 1, 31, 0);
$future = $future->addMonth();
$past = $past->subMonth();
これが使用した結果です diffForHumans()
:
指示 | 出力 |
---|---|
echo $dt->diffForHumans($future); |
1 month before |
echo $dt->diffForHumans($past); |
1 month after |
結論
この記事では、Carbonをインストールし、Carbonが提供する機能について説明しました。
Laravelについて詳しく知りたい場合は、Laravelトピックページで演習とプログラミングプロジェクトを確認してください。 PHPについて詳しく知りたい場合は、PHPトピックページで演習とプログラミングプロジェクトを確認してください。