gpt4 book ai didi

php DateTime createFromFormat 功能

转载 作者:可可西里 更新时间:2023-11-01 12:22:24 25 4
gpt4 key购买 nike

您好,我似乎无法让日期时间方法按预期工作?我可能做错了什么?

// Passes OK 
$dateTime = DateTime::createFromFormat('d/m/Y', '12/12/2012' );
var_dump($dateTime);

// should fail but returns - 2016-09-25
$dateTime = DateTime::createFromFormat('d/m/Y', '56/56/2012' );
var_dump($dateTime);

// correctly returns False
$dateTime = DateTime::createFromFormat('d/m/Y', '56/56/fail' );
var_dump($dateTime);

// should fail but returns 2019-08-29 09:58:10
$dateTime = DateTime::createFromFormat('m/d/Y', '90/90/2012' );
var_dump($dateTime);

enter image description here

最佳答案

关于 DateTime::createFromFormat 的事情是它识别两种类型的意外输入:产生错误的类型和产生警告的类型。

'56/56/fail' 等输入会产生错误,因此会返回 false,一切正常。然而,'56/56/2012' 给出的不是错误而是警告,实际上被解析为 2012 年第 56 个月的第 56 天。由于 2012 年没有 56 个月,因此 PHP 内部更改这到 2016 年 + 8 个月 = 2016 年 8 月。由于那个月没有 56 天,我们有另一个补偿到 2016 年 9 月 + (56 - 31) 天 = 2016 年 9 月 25 日。所以虽然出乎意料,但实际上这是正确的。

如果你想禁止这种自动调整,你必须包装 DateTime 工厂方法并使用 DateTime::getLastErrors作为引用:

$dateTime = DateTime::createFromFormat('d/m/Y', '56/56/2012');
$errors = DateTime::getLastErrors();
if (!empty($errors['warning_count'])) {
echo "Strictly speaking, that date was invalid!\n";
}

See it in action .

关于php DateTime createFromFormat 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10120643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com