假设系统时间设置为2017-03-30.然后这段代码将错误的日期转换为:
<?php
$dateTime = DateTime::createFromFormat('m-Y', '02-2017');
$converted = $dateTime->format('Y-m');
print_r($converted);
Run Code Online (Sandbox Code Playgroud)
价值$converted是
2017-03
Run Code Online (Sandbox Code Playgroud)
但仅限于从浏览器运行时.从命令行运行,它给出了正确的结果2017-02.
谁知道为什么?2月没有30天,所以这可能是一个原因,但仍然存在.
编辑:将格式从"Ymd"更改为"Y-m".
编辑2:添加了有关命令行与浏览器的信息.
该规则使用DateTime::__construct(),DateTime::createFromFormat()并strtotime()解析各种日期和时间格式,并使用它来填补缺失的组件在解释值的文档.
当它解析一个不完整的日期时,它会使用当前日期和时间中缺失组件的值.
在您的具体情况下,02-2017使用当月的某一天(30)转换为"2017年2月" .即2017年2月30日,然后标准化为2017年3月2日.
您可以DateTime::createFromFormat()通过!在格式字符串中放置一个感叹号()来告诉将所有组件初始化为Unix纪元(而不是当前日期和时间):
$dateTime = DateTime::createFromFormat('!m-Y', '02-2017');
print_r($dateTime);
Run Code Online (Sandbox Code Playgroud)
它输出:
DateTime Object
(
[date] => 2017-02-01 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1149 次 |
| 最近记录: |