Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 碳中的零日期_Php_Laravel_Date_Datetime_Php Carbon - Fatal编程技术网

Php 碳中的零日期

Php 碳中的零日期,php,laravel,date,datetime,php-carbon,Php,Laravel,Date,Datetime,Php Carbon,我需要解析一些静态文本文件 在这些文件中,我的日期格式为Ymd,Ym,YmdHis甚至His,但我可以管理 问题(artisan tinker的输出): 当日期是一个合适的日期(示例中为2016-04-14)时,一切都很顺利,但当我得到一个零日期并将其传递给Carbon时,它将其更改为1年11月30日 有没有办法教你在这种情况下如何行事?你必须检查日期是否大于最小日期(Carbon::minValue()),并在必要时进行更正(例如,使其等于最小日期或可能将其设置为“从不”) >$date=\C

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

在这些文件中,我的日期格式为
Ymd
Ym
YmdHis
甚至
His
,但我可以管理

问题(artisan tinker的输出):

当日期是一个合适的日期(示例中为2016-04-14)时,一切都很顺利,但当我得到一个零日期并将其传递给
Carbon
时,它将其更改为1年11月30日


有没有办法教你在这种情况下如何行事?

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

>$date=\Carbon\Carbon::createFromFormat('Ymd','00000000','UTC');
=>碳\碳@-62169953296{#3106
日期:-0001-11-30 08:31:44.0 UTC(+00:00),
时区:“UTC”,
}
>>>如果($date<\Carbon\Carbon::minValue())$date=\Carbon\Carbon::minValue();
=>碳\碳@-62135601840{#3125
日期:0001-01-01 00:00:00.0欧洲/华沙(+01:24),
时区:“欧洲/华沙”,
}

没有零月份或零日,因此它将其解释为前一年的最后一个月,然后是前一个月的最后一天。你期望什么日期?垃圾入垃圾出,在你发送给Carbon之前确定你的日期文件来自第三方,不幸的是我无法修改它们的结构,也无法“可视化”空/未设置日期
“有没有办法教Carbon在这种情况下如何行为?”
它应该如何行为?@vascowhite个人,我认为它应该向上或向下——也许是一种选择。我倾向于集中注意力。例如,如果通过的日期为零,则它将成为当月的第一天,而不是上个月的最后一天
>>> $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"
>>> $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",
   }