プログラミングメカブログ

Adults cling to the past, Children want to escape to the future

プログラミングメカブログ

Adults cling to the past, Children want to escape to the future

6月

29

みんな知ってた?あら便利なCarbonの使い方

  • POSTED BY 小谷松 丈樹 IN 調査
  • No Comments

誰もが知ってる日付操作ライブラリCarbon

cloudpack あら便利カレンダー 2017の22日目です。

Carbonってみんな知ってますよね?
知らない人はPHPで日付時刻処理を書くならCarbonを使うべきを今すぐ読んでください!
とても便利なCarbonですが、公式ドキュメントでも公開されていないあら便利な小ネタを紹介します。

29日ならでは処理

Carbonを入れてただ8ヶ月後の日付を返すだけのプログラム(carbontest.php)を書いたとします。

今日は6月29日なので、結果はこんな感じ

もちろん、来年の2月はうるう年ではないので3月1日になります。
そこでaddMonths()の中身を覗いてみるとこんな実装になっています。

useMonthsOverflow() でフラグを設定することにより、
常にオーバーフローさせるか否かを選択することができます。
デフォルトはtrueなので、設定していなければ必ずオーバーフローした日付を返すことになります。
addMonthsNoOverflow() ってなんだと追ってみると、public functionとして定義されています。
つまりは、addMonths()の代わりにaddMonthsNoOverflow()を使うことで、
局所的にオーバーフローさせない日付を返すことが可能です。

すると結果は下記の通り

オーバーフローせず2月28日を返却します。

Overflowの使い分けは裏でこっそり使われていて、例えばisNextMonth()では、
来月の月を取得するためにオーバーフローさせないようにaddMonthNoOverflow()を使っていたりします。
来月かどうかを取得したいのにオーバーフローを起こして更にその次の月と比較してしまったら
NextMonth とはなんぞや、という感じですね。

まとめ

29日ならではのあら便利な小ネタでした。
Carbonを使ってないPHPerは存在しないとは思いますが、
公式のドキュメントでもOverflowについては一切かかれていないので、
ソースを読まないと分からないこともあるんだなと思いました。
なのでみんな、ライブラリのソースに潜ってPHP、書こう!

明日はcloudpack あら便利カレンダー 2017最終日です。お楽しみに!

Tags : |

コメントを残す

Please type the characters of this captcha image in the input box

Please type the characters of this captcha image in the input box