我在 php 中有一个函数,它使用 date_create_from_format 函数将格式“Ym”的日期转换为日期时间。它工作正常,除了我今天发现的一种情况,但我找不到问题。情况如下:
当前日期:2014 年 7 月 31 日。
$period值:'201409'(作为我想做一些计算的月份)
$newDateCreated = date_create_from_format('Ym', $period);
Run Code Online (Sandbox Code Playgroud)
这将返回创建的新日期时间,但其值为 10/01/2014 而不是 09/01/2014
如果我不设置值 201409,而是设置 201411 或 201408,则可以正确创建新日期时间。
我发现的唯一解决方案是替换
$newDateCreated = date_create_from_format('Ym', $period);
Run Code Online (Sandbox Code Playgroud)
为了
$newDateCreated = date_create_from_format('Ymd', $period.'01');
Run Code Online (Sandbox Code Playgroud)
我相信这一定与该月的某一天有关,但我找不到真正的问题。对此有什么想法吗?
提前致谢。
从手册来看:
如果格式不包含字符!那么生成的时间中未指定格式的部分将被设置为当前系统时间。
如果 format 包含字符 !,则 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"
// }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
566 次 |
| 最近记录: |