人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

phpの便利な日付、時刻オブジェクト Carbon を使用する。平成、令和などの和暦を表示させる

● 文字列から Carbon オブジェクトを作成する

次のどちらもokです。

$carbon_obj = new Carbon('2019-03-11');
$carbon_obj = new Carbon('2019/03/11');

● UNIX Timestamp から Carbon オブジェクトを作成する

$carbon_obj = \Carbon\Carbon::createFromTimestamp( $v->getMTime() );

● UNIXタイムスタンプを出力する

dd(Carbon::now()->timestamp);

● 年月日などを出力する

echo $dt->year;
echo $dt->month;
echo $dt->day;
echo $dt->hour;
echo $dt->minute;
echo $dt->second;
2019
5
1
10
42
28

● LaravelのBlade内で直接 Carbon を呼び出して日付を表示させる

bladeテンプレートで Carbon を呼び出すには次のように記述します。

{{ \Carbon\Carbon::now() }}
{{ \Carbon\Carbon::now()->format("Y年m月d日") }}    // 2019年03月05日
{{ \Carbon\Carbon::now()->format("Y年n月j日") }}    // 2019年3月5日
{{ \Carbon\Carbon::now()->format("Y年m月d日 H:i:s") }} // 2019年03月05日 12:30:59
{{ \Carbon\Carbon::now()->format("Y年n月j日 H:i") }} // 2019年3月5日 12:30

format メソッドの引数は PHP の date と同じです。
http://php.net/manual/ja/function.date.php

● Carbonのリファレンス

https://carbon.nesbot.com/docs/

● Carbon で時刻 00:00:00 を指定する

$dt = new \Carbon\Carbon();
$dt->setTime(0, 0, 0)
dd($dt);

● 日付の指定

$dt->setDate($dt->year, $dt->month, 15);

● 日付の指定や加算で注意すること

$dt = new \Carbon\Carbon('2019-05-31');
dump( $dt->copy()->addMonth(1) );
dump( $dt->copy()->addMonthNoOverflow(1) );

 ↓ 結果

date: 2019-07-01 00:00:00.0 Asia/Tokyo (+09:00)
date: 2019-06-30 00:00:00.0 Asia/Tokyo (+09:00)

となります。addMonth() メソッドでは 6月31日がないので、7月1日になるのです。
安全のため addMonth () を 使うのを今すぐやめて addMonthNoOverflow() を使用しましょう
同じく
安全のため addYear () を 使うのを今すぐやめて addYearNoOverflow() を使用しましょう

● addMonthsNoOverflow() と addMonthNoOverflow() ( s ありと s なし)

addMonthNoOverflow は addMonthsNoOverflow を呼び出しているので、ほぼラッパーみたいな感じですが、デフォルトで引数1がセットされるので、1ヶ月だけ追加する場合はaddMonthNoOverflow() だけでもokです。

    public function addMonthsNoOverflow($value)
    public function addMonthNoOverflow($value = 1)

● 日付の加算、減算、指定

// 日付の加算(addition)
$dt->addDay();
$dt->addWeek();
$dt->addMonthNoOverflow();
$dt->addYearNoOverflow();
$dt->addHour();
$dt->addMinute();
$dt->addSecond();

// 日付の減算(subtraction)
$dt->subDay();
$dt->subWeek();
$dt->subMonthNoOverflow();
$dt->subYearNoOverflow();
$dt->subHour();
$dt->subMinute();
$dt->subSecond();

// 昨日
$dt->yesterday();

// 月初
$dt->startOfMonth();
// 月末
$dt->endOfMonth();

// その日の 00:00:00
$dt->startOfDay();

// その日の 23:59:59.999999
$dt->endOfDay();

// parseによる指定(来月末)
$dt->parse('last day of next month');

● Carbonで和暦(昭和、平成、令和)を表示させる

こちら https://qiita.com/chiyoyo/items/da32649b0e04957856c1
の DatetimeUtility.php を使わせてもらいましょう

date_default_timezone_set('Asia/Tokyo');

require_once('DatetimeUtility.php');
$dt = Carbon::parse('2019-05-01');

echo DatetimeUtility::date('JK年n月j日 H:i:s', $dt->timestamp)."\n";
echo DatetimeUtility::date('Jk年n月j日 H:i:s', $dt->timestamp)."\n";

$dt->subSecond(1);
echo DatetimeUtility::date('JK年n月j日 H:i:s', $dt->timestamp)."\n";
echo DatetimeUtility::date('Jk年n月j日 H:i:s', $dt->timestamp)."\n";
令和元年5月1日 00:00:00
令和1年5月1日 00:00:00
平成31年4月30日 23:59:59
平成31年4月30日 23:59:59
No.1429
06/06 09:36

edit