gpt4 book ai didi

PHP DateTime CreateFromFormat 问题

转载 作者:可可西里 更新时间:2023-10-31 22:40:15 26 4
gpt4 key购买 nike

function validateDate($date, $format = 'm-Y') {
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}


validateDate('09-2017', 'm-Y');

函数是从这个 answer 复制的或 php.net

我很困惑为什么它返回 false 而它在前几个月返回 true。有什么想法吗?

最佳答案

这是因为您没有提供日期,所以它默认使用当前日期。当前日期是 31 日,但 9 月只有 30 天,因此会跳到 10 月 1 日。

看这个例子:

function validateDate($date, $format = 'm-Y') {
$d = DateTime::createFromFormat($format, $date);
echo $d->format("d-".$format); // added the day for debugging
return $d && $d->format($format) == $date;
}
var_dump(validateDate('08-2017', 'm-Y')); // 31-08-2017, true
var_dump(validateDate('09-2017', 'm-Y')); // 01-10-2017, there's no 31-09-2017, false

函数是从这个 answer 复制的或 php.net

这有点简陋,但您可以检测格式中是否没有 d 并手动将其设置为 1 以避免这种情况:

<?php
function validateDate($date, $format = 'm-Y') {
if (strpos($format, "d") === false) {
$format = "d ".$format;
$date = "01 ".$date;
}
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) === $date;
}
var_dump(validateDate('08-2017', 'm-Y')); // 31-08-2017, true
var_dump(validateDate('09-2017', 'm-Y')); // 01-09-2017, true

关于PHP DateTime CreateFromFormat 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45987530/

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