はじめに
Carbonは、PHPで日付や時刻を扱う処理を簡単にするためのライブラリです。
Laravelには標準搭載されています。
想定読者
PHP/Laravel初学者
開発環境・前提
開発環境
- OS:Windows11 22H2
- PHP 8.2.0
- Laravel 9.44.0
前提
- ローカルにLaravel開発環境があること。
(今回の検証用)
作成したデフォルトのLaravelプロジェクトにおいて、以下の各ディレクトリにファイルをそれぞれ配置。
ファイル名は任意。
- app\Http\Controllers\MonthController.php
- resources\views\month.blade.php
ソースコード(該当箇所のみ)
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
class MonthController extends Controller
{
public function month()
{
$month = new Carbon('20220331');
$month->subMonth();
return view('month')->with('month', $month);
}
}
/* bodyタグの間に記述(ブラウザに日時を表示させるための記述)*/
<h1>{{ $month }}</h1>
/* デフォルトのルーティングに以下を追記 */
Route::get('month', [App\Http\Controllers\MonthController::class, 'month']);
実装内容の解説
use Carbon\Carbon;
このuse宣言をMonthController.php
に追記することで、MonthController内でCarbonを用いた処理を行えるようになります。
$month = new Carbon('20220331');
2022年3月31日を指定し、Carbonのインスタンスを作成しています。
$month->subMonth();
1ヶ月減算する処理です。
return view('month')->with('month', $month);
変数$month
を渡した上で、ビューファイルmonth.blade.php
を表示させます。
★注意点(メインテーマ)
上記の実装を行い、http://localhost/month
にアクセスすると、以下のように日時がブラウザに表示されるはずです。
「2022年3月31日」から1ヶ月減算すると、感覚的には「2022-02-28(うるう年以外)」のように月末になってほしいところですが、中途半端な日付になってしまいます。
これは「2022年2月31日」という日付が存在しないため、28日からあふれた3日分が加算されたことによるものです。
それでは、ぴったり月末にするにはどうすれば良いのでしょうか?
(答え)
MonthController.php
の該当部分を以下の通りに編集すると解決します。
- $month->subMonth();
+ $month->subMonthNoOverflow();
この編集後、再度http://localhost/month
にアクセスすると、以下のように日時が変わっているはずです。
これできれいに月末に揃えることができました!
この方がしっくりきますよね!
ちなみに加算するパターンを試すため、先程編集したMonthController.php
を以下のように再編集すると、日時は「2022-04-30 00:00:00」になります。
- $month->subMonthNoOverflow();
+ $month->addMonthNoOverflow();
なお、ただの$month->addMonth();
にした場合は「2022年4月31日」が存在しないので、30日からあふれた1日分が加算されて「2022-05-01 00:00:00」になります。
まとめ
日付や時刻を扱う処理では想定外の結果が生じる可能性が高いので、開発においては注意したいポイントです。
本記事が少しでも読者の皆様の参考になれば幸いです。
それでは良き開発ライフを!!
参考情報
- Carbon公式