PHPユーザーズ(slack)の#laravelチャンネル眺めていたら、Chronosって日付を扱うライブラリの話題が出てて
少し調べてみました。
CarbonとChronosの違い
Carbonはmutable(変更可能)で、DateTimeを継承。
Chronosはimmutable(変更不可)で、DateTimeImmutableを継承。CakePHPのプラグインとして提供されているが依存しないので単体で利用可。
そもそもimmutableとは
端的に言えば、インスタンス生成時の状態から値を変えられない。
状態を変化させる場合には、新たなインスタンスを生成する(広義や狭義によっては変わりそうだけど)。
なにが嬉しいか
状態が変化しないので、コード作成がシンプルになる。
データが誤って更新されることが無いので、不具合が発生し辛いとか。
Laravelではどうなっているか
最新のバージョン(5.6)では日付の操作にはCarbonが利用されている。
昨年、Carbonはメンテナス続くか怪しいのでChronos使おうぜと提案。
変更大変だよねとかありつつChronos勢優勢だったのだが、今年頭にCarbonの作者がコミッター追加してメンテナンスするとのコメントが入りtaylor氏がcloseしています。
https://github.com/laravel/ideas/issues/362
で昨日(5/29)、Laravel NewsでChronosおすすめ的な記事が上がってました。
Working with Mutable and Immutable DateTime in PHP
今後どうなるか
どうなるんでしょうね?
個人的には、今から作り始めるプロジェクトではCarbonではなくChronos使っていこうと思っています。