- サイト制作のノウハウと最適化を目指して-

2018.10.1PHPで翌日/月末/月初など日付を加算/減算して取得(date/datetime/carbon)

PHPで翌日/月末/月初など日付を加算/減算して取得(date/datetime/carbon)

今日の日付、明日の日付、来月の月初の日付、来月の月末の来年の日付など日付を求める計算を考え出したらキリがありませんがPHPで使われる計算方法をご紹介します。

PHPの日付を計算する手段としてdate() DateTime() Carbonなどがあります。筆者のオススメ的にはCarbonですが導入できない環境も多いので汎用的な例と合わせて紹介していきます。


導入構成

  • PHP 7.0.23

Carbon

本記事ではPHPの標準関数date()DateTime以外にCarbonを使用しています。

CarbonはDateTimeを拡張したシンプルなライブラリです、Laravelでも導入されており日付の計算や比較などに優れていますので是非利用ください。

インストールにはcomposerを使用します。

composer
composer require nesbot/carbon

またcarbonを使用する場合、本記事で紹介するコードには下記のコードを全て記載しています

PHP
namespace Carbon; require("./vendor/autoload.php");

日付表示方法

サンプルコードでは呼び出したい日付を様々なパターンで紹介しています。もちろん紹介しているコードが全てではありませんので参考程度に利用ください。

今日の日付を表示

date
echo date('Y-m-d'); // 2018-09-30 echo date('Y-m-d', strtotime('now')); // 2018-09-30 echo date('Y-m-d', strtotime('today')); // 2018-09-30
DateTime()
$date = new DateTime(); echo $date->format('Y-m-d'); // 2018-09-30
Carbon
echo Carbon::now()->toDateString(); // 2018-09-30 echo Carbon::today()->toDateString(); // 2018-09-30

特定の日付を表示

date
echo date('Y-m-d',strtotime('2018-01-01')); // 2018-01-01 echo date('Y-m-d',strtotime('2018-02-01 12:00:00')); // 2018-02-01
DateTime()
$date = new DateTime('2018-01-01'); echo $date->format('Y-m-d') ; // 2018-01-01
Carbon
echo Carbon::parse('2018-01-01')->toDateString(); // 2018-01-01

明日の日付を表示

date
echo date('Y-m-d', strtotime('+1 day')); // 2018-10-01 echo date('Y-m-d', strtotime('tomorrow')); // 2018-10-01
DateTime()
$date = new DateTime('+1 day'); echo $date->format('Y-m-d') ; // 2018-10-01 $date = new DateTime(); echo $date->modify('+1 day')->format('Y-m-d') ; // 2018-10-01
Carbon
echo Carbon::now()->addDay(1)->toDateString(); // 2018-10-01 echo Carbon::tomorrow()->toDateString(); // 2018-10-01

昨日の日付を表示

date
echo date('Y-m-d', strtotime('-1 day')); // 2018-09-29 echo date('Y-m-d', strtotime('yesterday')); // 2018-09-29
DateTime()
$date = new DateTime('-1 day'); echo $date->format('Y-m-d') ; // 2018-09-29 $date = new DateTime(); echo $date->modify('-1 day')->format('Y-m-d') ; // 2018-09-29
Carbon
echo Carbon::now()->addDay(-1); // 2018-09-29 echo Carbon::yesterday()->toDateString(); // 2018-09-29

当月月初の日付を表示

date
echo date('Y-m-01'); // 2018-09-01 echo date('Y-m-d', strtotime('first day of this month')); // 2018-09-01
DateTime()
$date = new DateTime(); echo $date->format('Y-m-01') ; // 2018-09-01 $date = new DateTime(); echo $date->modify('first day of this month')->format('Y-m-d') ; // 2018-09-01
Carbon
echo Carbon::now()->firstOfMonth()->toDateString(); // 2018-09-01

当月月末の日付を表示

date
echo date('Y-m-t'); // 2018-09-30 echo date('Y-m-d', strtotime('last day of this month')); // 2018-09-30
DateTime()
$date = new DateTime(); echo $date->format('Y-m-t') ; // 2018-09-30 $date = new DateTime(); echo $date->modify('last day of this month')->format('Y-m-d') ; // 2018-09-30
Carbon
echo Carbon::now()->lastOfMonth()->toDateString(); // 2018-09-30

来月月初の日付を表示

date
echo date('Y-m-d', strtotime('first day of next month')); // 2018-10-01
DateTime()
$date = new DateTime(); echo $date->modify('first day of next month')->format('Y-m-d') ; // 2018-10-01
Carbon
echo Carbon::now()->firstOfMonth()->addMonth(1)->toDateString(); // 2018-10-01

来月月末の日付を表示

date
echo date('Y-m-d', strtotime('last day of next month')); // 2018-10-31
DateTime()
$date = new DateTime(); echo $date->modify('first day of next month')->format('Y-m-d') ; // 2018-10-01
Carbon
echo \Carbon\Carbon::now()->firstOfMonth()->addMonth(1)->lastOfMonth()->toDateString(); // 2018-10-31

前月月初の日付を表示

date
echo date('Y-m-01', strtotime(date('Y-m-01') . '-1 month')); // 2018-08-01 echo date('Y-m-d', strtotime('first day of previous month')); // 2018-08-01
DateTime()
$date = new DateTime(); echo $date->modify('first day of previous month')->format('Y-m-d') ; // 2018-08-01
Carbon
echo Carbon::now()->firstOfMonth()->addMonth(-1)->toDateString(); // 2018-08-01

前月月末の日付を表示

date
echo date('Y-m-t', strtotime(date('Y-m-01') . '-1 day')); // 2018-08-31 echo date('Y-m-t', strtotime('last day of previous month')); // 2018-08-31
DateTime()
$date = new DateTime(); echo $date->modify('last day of previous month')->format('Y-m-d'); // 2018-08-31
Carbon
echo Carbon::now()->firstOfMonth()->addDay(-1)->toDateString(); // 2018-08-31

これでPHPで日付を一通り指定できるようになりました。関数ごとの記述方法の違いを少しでも感じ取って貰えましたか?

環境によって利用できるものも違うかと思いますが、許されるならCarbonを導入することをオススメします