今天我遇到了一些让我对这个\DateTime::createFromFormat函数的行为感到困惑的事情.
在我的情况下,我有一个字符串,表示以下格式的日期m/Y (05/2017).当我想将字符串转换为DateTime对象时,我遇到了以下问题:
$date = \DateTime::createFromFormat('m/Y', '02/2017');
当我转储$date变量时,里面的日期属性是'2017-03-03 11:06:36.000000'
但是如果我在月份之前添加日期,$date = \DateTime::createFromFormat('d/m/Y', '01/02/2017');我会找回具有正确日期属性的对象.(遗憾的是,我无法更改日期的格式并添加日期.它必须是m/Y).
我提出的修复方法是将月份的第一天连接到我拥有的日期字符串,$date = '01/'.$dateString;但我宁愿不这样做,因为它是硬编码的.
这有什么不对?createFromFormat函数是否缺少如何创建对象的信息?我对此非常困惑.感谢大家的帮助!
Mar*_*ker 10
默认情况下,PHP将使用当前日期/时间填充缺少的日期值; 所以
$date = \DateTime::createFromFormat('m/Y', '02/2017');
Run Code Online (Sandbox Code Playgroud)
将使用当前日期填充缺失的日期值; 并且由于2月31日是无效日期,它将向前推进到3月.同样,小时/分钟/秒将根据当前时间填充缺失的时间值.
如果要强制强制执行月份/时间的开头,请使用前导修改掩码 !
$date = \DateTime::createFromFormat('!m/Y', '02/2017');
Run Code Online (Sandbox Code Playgroud)
这将填补失踪的一天,在这个月的第一天和时间 00:00:00
或者,尾随|将具有相同的效果
$date = \DateTime::createFromFormat('m/Y|', '02/2017');
Run Code Online (Sandbox Code Playgroud)