PHP 日期时间从 return 格式创建错误的结果
PHP datetime create from format return wrong result
我需要检查一个字符串是否与某种格式匹配,我使用 DateTime::createFromFormat
来强制执行它。但它有一些错误。
示例我有一个日期:2020 年 8 月 15 日,我尝试将其解析为格式为“d/m/Y”的日期时间对象,然后将其打印为其他格式:
DateTime::createFromFormat("d/m/Y", '8/15/2020')->format('d-m-Y')
// result: 08-03-2021
那是 wreig,因为我读过 php.net https://www.php.net/manual/en/datetime.createfromformat.php
他们说:d:日(1->30),m:月(1->12),Y:年(2020)
但是我得到了一个奇怪的结果?它是如何工作的?还是错误?
感谢您的回答。
您的格式是 day/month/year
,但没有像给出的 8/15/2020
那样的月份 15
。
你是说 15/8/2020
吗?
i try to parse it to datetime object with format "d/m/Y"
...不清楚您为什么要这样尝试。 8/15/2020
显然是 m/d/Y
。您需要使用它实际编写的格式来解析它。
之后您可以再次将其输出到 d/m/Y
- 这是一个单独的操作。
DateTime::createFromFormat("m/d/Y", '8/15/2020')->format('d-m-Y')
我认为 PHP 手册不正确。
如果超出日期或月份的范围,DateTime::getLastErrors() 方法会生成警告。您可以对此进行评估。例如:
function DateTimeCreateFromStrictFormat($format, $input){
$dt = DateTime::createFromFormat($format, $input);
$errArr = DateTime::getLastErrors();
return $errArr['warning_count']+$errArr['error_count'] ? false : $dt;
}
$dt = DateTimeCreateFromStrictFormat("d/m/Y", '8/15/2020');
var_dump($dt); //bool(false)
$dt = DateTimeCreateFromStrictFormat("d/m/Y", '8/12/2020');
var_dump($dt); //object(DateTime)#2 (3) { ["date"]=> string(26) "2020-12-08 10:34:34.000000" ..
我需要检查一个字符串是否与某种格式匹配,我使用 DateTime::createFromFormat
来强制执行它。但它有一些错误。
示例我有一个日期:2020 年 8 月 15 日,我尝试将其解析为格式为“d/m/Y”的日期时间对象,然后将其打印为其他格式:
DateTime::createFromFormat("d/m/Y", '8/15/2020')->format('d-m-Y')
// result: 08-03-2021
那是 wreig,因为我读过 php.net https://www.php.net/manual/en/datetime.createfromformat.php 他们说:d:日(1->30),m:月(1->12),Y:年(2020)
但是我得到了一个奇怪的结果?它是如何工作的?还是错误?
感谢您的回答。
您的格式是 day/month/year
,但没有像给出的 8/15/2020
那样的月份 15
。
你是说 15/8/2020
吗?
i try to parse it to datetime object with format "d/m/Y"
...不清楚您为什么要这样尝试。 8/15/2020
显然是 m/d/Y
。您需要使用它实际编写的格式来解析它。
之后您可以再次将其输出到 d/m/Y
- 这是一个单独的操作。
DateTime::createFromFormat("m/d/Y", '8/15/2020')->format('d-m-Y')
我认为 PHP 手册不正确。
如果超出日期或月份的范围,DateTime::getLastErrors() 方法会生成警告。您可以对此进行评估。例如:
function DateTimeCreateFromStrictFormat($format, $input){
$dt = DateTime::createFromFormat($format, $input);
$errArr = DateTime::getLastErrors();
return $errArr['warning_count']+$errArr['error_count'] ? false : $dt;
}
$dt = DateTimeCreateFromStrictFormat("d/m/Y", '8/15/2020');
var_dump($dt); //bool(false)
$dt = DateTimeCreateFromStrictFormat("d/m/Y", '8/12/2020');
var_dump($dt); //object(DateTime)#2 (3) { ["date"]=> string(26) "2020-12-08 10:34:34.000000" ..