Carbon的零日期

时间:2016-07-19 15:19:39

标签: php laravel date datetime php-carbon

我有一些我需要解析的静态文本文件。

在这些文件中,我的日期格式为amMoment.changeLocale('de');YmdYm甚至YmdHis,但我可以管理。

问题(从His输出):

artisan tinker

如果日期是正确的日期(示例中为2016-04-14),一切都很有效,但当我得到日期并将其传递给>>> $date = \Carbon\Carbon::createFromFormat('Ymd', '20160415', 'UTC') => Carbon\Carbon {#1315 +"date": "2016-04-15 15:00:22.000000", +"timezone_type": 3, +"timezone": "UTC", } >>> $date->format('Ymd') => "20160415" >>> $date = \Carbon\Carbon::createFromFormat('Ymd', '00000000', 'UTC') => Carbon\Carbon {#1076 +"date": "-0001-11-30 15:00:31.000000", +"timezone_type": 3, +"timezone": "UTC", } >>> $date->format('Ymd') => "-00011130" 时,它会将其更改为第1年11月30日

有没有办法教Carbon如何在这样的情况下表现?

1 个答案:

答案 0 :(得分:0)

您必须检查日期是否大于最小日期(Carbon::minValue()),并在必要时进行更正(例如,使之等于最小日期或将其设置为“从不”)。

>>> $date = \Carbon\Carbon::createFromFormat('Ymd', '00000000', 'UTC');
=> Carbon\Carbon @-62169953296 {#3106
     date: -0001-11-30 08:31:44.0 UTC (+00:00),
     timezone: "UTC",
   }
>>> if ($date < \Carbon\Carbon::minValue()) $date = \Carbon\Carbon::minValue();
=> Carbon\Carbon @-62135601840 {#3125
     date: 0001-01-01 00:00:00.0 Europe/Warsaw (+01:24),
     timezone: "Europe/Warsaw",
   }