0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPで特定の日付の翌月or先月の年月日を考慮した月末月初を取得する。

Last updated at Posted at 2018-10-30

【修正】PHPで特定の日付の翌月or先月の年月日を考慮した月末月初を取得する

※この記事は有識者の方にコメントを頂いたことにより大幅に修正を行っております。

PHPで年月日を考慮した翌月日付を取得したかったので調べてみました。

参考
https://qiita.com/sawadashota/items/7fc8c6ded17720ddbd9d

【Butケース】PHPのdateとstrtotimeを使って翌月と先月を取得

おお!できた?

// 翌月月初
echo date('Y-m-01', strtotime(date('2018-10-01').'+1 month')); // 2018-11-01
// 先月月初
echo date('Y-m-01', strtotime(date('2018-10-01').'-1 month')); // 2018-09-01

と思いきや…
コメントでご指摘頂いた通り

1日以外を指定すると想定と違う動きが…

1日以外が指定される場合だと想定とは全く違う日付になりました。。。
だめじゃん!

// 翌月月初
echo date('Y-m-01', strtotime(date('2018-10-31').'+1 month')); // 2018-12-01
// 先月月初
echo date('Y-m-01', strtotime(date('2018-10-31').'-1 month')); // 2018-10-01

【ok】DateTimeImmutableを使って翌月と先月の月初月末を取得

コメントで頂いたコードをそのまま動かしてみると…
おお!ちゃんとできるらしい!!

DateTimeImmutableとは?

(PHP 5 >= 5.5.0, PHP 7)
このクラスの挙動は DateTime とほぼ同じですが、 自分自身は変更せずに新しいオブジェクトを返すという点だけが異なります。
PHPリファレンス

$dt = DateTimeImmutable::createFromFormat('Y-m-d', '2018-10-31');

// 月初
echo $dt->modify('first day of 00:00:00')->modify('next month')->format('Y-m-d'); // 2018-11-01
echo $dt->modify('first day of 00:00:00')->modify('last month')->format('Y-m-d'); // 2018-09-01

// 月末
echo $dt->modify('first day of 00:00:00')->modify('next month')->modify('last day of')->format('Y-m-d'); // 2018-11-30
echo $dt->modify('first day of 00:00:00')->modify('last month')->modify('last day of')->format('Y-m-d'); // 2018-09-30

.
...
......
がしかし!!

Fatal error: Class 'DateTimeImmutable' not found が出たらPHPのバージョンが5.5より低いから

出社30分でそうそうにテストをした所
とある環境ではPHPのバージョンが5.5より低いらしく今回は利用できませんでした!

参考
PHPリファレンス
Stackoverflow

php5.5より低い時はどうすれば…

わかりません!
もしご存知で有ればコメント頂けると助かります!

いつも無知な私にご教示いただき誠にありがとうございます!!

案1:月初にしてから月を変える

2018-10-31 -> 2018-10-01

の処理を作ってから

2018-10-01に対してdateとstrtotimeなどで翌月にしてあげる!!

0
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?