:: createFromFormat()导致提前一个月:
var_dump($_GET['archive']);
var_dump(Carbon::createFromFormat('m/Y', $_GET['archive']));
结果:
string '11/2015' (length=7)
object(Carbon\Carbon)[160]
public 'date' => string '2015-12-01 10:38:41.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'Europe/London' (length=13)
答案 0 :(得分:1)
如果没有提供,碳似乎使用当天。因此
var_dump(Carbon::createFromFormat('m/Y', '10/2015'));
var_dump(Carbon::createFromFormat('m/Y', '11/2015'));
结果,例如7月31日在
object(Carbon\Carbon)[156]
public 'date' => string '2015-10-31 11:03:10.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'Europe/London' (length=13)
object(Carbon\Carbon)[138]
public 'date' => string '2015-12-01 11:03:10.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'Europe/London' (length=13)
10月份排在第31位但是“11月31日”实际上是12月1日"。
答案 1 :(得分:1)
似乎你只是因为你在本月31日进行测试而感到不幸。
然而,这(显然)是一个记录在案的特征。请参阅:http://php.net/manual/en/datetime.createfromformat.php
如果您正确设置格式掩码"",它可以正常运行。
$x = Carbon::createFromFormat ('m/Y', '04/2009');
$y = DateTime::createFromFormat ('m/Y|', '04/2009');
dd ($x, $y);
为了避免歧义,Carbon
函数只是PHP的基础DateTime
函数的包装器;我的目的是证明这不是引起我们头痛的Carbon
功能。
如果您在本月31日进行测试,则上面$x
将被视为31 April 2009
,该显示将显示为5月1日。
使用掩码中的管道符号,所有未声明的时间变量(H
,i
,s
)都设置为零,并且日期变量({{1 },d
)设置为1,因此无论一周中的某一天如何,m
始终会按预期做出响应。
对于我在当月第4天晚上17:46进行测试,上面的代码产生以下内容:
$y
在我看来,这是一个非常奇怪的日期/时间函数实现。您想要使用此功能的唯一真实情况是,您是否正在从外部源(例如XML" date"字段)读取数据。
地球上哪个程序员希望他们的程序假设输入数据的缺失时间(或在你的情况下,天)组件应该从运行时执行时间中获取?这绝对是疯狂的疯狂。