我在php中有一个函数,它使用date_create_from_format函数将格式为'Ym'的日期转换为datetime。它正常工作,除了我今天发现的一个案例,我无法找到问题。情况如下:
当前日期:2014年7月31日。
$ period value:'201409'(作为我想要做一些计算的月份)
$newDateCreated = date_create_from_format('Ym', $period);
这将返回创建的新日期时间,但值为10/01/2014而不是09/01/2014
如果不是设置值201409,而是将201411或201408设置为正确创建新的日期时间。
我发现的唯一解决方案是替换
$newDateCreated = date_create_from_format('Ym', $period);
的
$newDateCreated = date_create_from_format('Ymd', $period.'01');
我认为这必须与月份的某些事情有关,但我无法找到真正的问题。有关于此的任何想法吗?
提前致谢。
答案 0 :(得分:3)
来自manual:
如果格式不包含该字符!然后是部分的 格式中未指定的生成时间将设置为 当前的系统时间。
如果format包含字符!,则生成部分 时间未提供格式,以及左侧的值 !,将被设置为Unix纪元的相应值。
Unix纪元是1970-01-01 00:00:00 UTC。
实施例
date_create_from_format('Ym', '201409');
// Tries '2014-09-31 15:59:45', but since that date doesn't exists
// that becomes '2014-10-01':
// object(DateTime)#62 (3) {
// ["date"] => string(19) "2014-10-01 15:59:45"
// ["timezone_type"] => int(3)
// ["timezone"] => string(16) "Europe/Amsterdam"
// }
date_create_from_format('!Ym', '201409');
// object(DateTime)#62 (3) {
// ["date"] => string(19) "2014-09-01 00:00:00"
// ["timezone_type"] => int(3)
// ["timezone"] => string(16) "Europe/Amsterdam"
// }