看来你只是运气不好,因为你是在本月 31 日进行测试的。
然而,这(显然)是一个已记录的功能。看:http://php.net/manual/en/datetime.createfromformat.php 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
函数只是底层的包装DateTime
PHP的功能;我只是想证明这不是一个Carbon
令我们头疼的功能。
如果你是31号考试的话$x
上面将被读作31 April 2009
将显示为 5 月 1 日。
不过,使用掩码中的管道符号,所有未声明的时间变量(H
, i
, s
) 设置为零,日期变量 (d
, m
)设置为1,所以$y
无论星期几,我们都会按照您的预期做出回应。
对于我在该月第 4 天晚上 17:46 进行的测试,上面的代码产生以下结果:
Carbon @1233769590 {#219 ▼
date: 2009-02-04 17:46:30.0 Europe/London (+00:00)
}
DateTime @1233446400 {#217 ▼
date: 2009-02-01 00:00:00.0 Europe/London (+00:00)
}
在我看来,这是日期/时间函数的一个非常奇怪的实现。您想要使用此函数的唯一现实情况是,您正在从外部源(例如 XML“日期”字段)读取数据。
到底哪个程序员会希望他们的程序假设传入数据的缺失时间(或者在您的情况下是天)部分应该从运行时执行时间中获取?这绝对是疯狂的疯子。