gpt4 book ai didi

php - 使用 DateTime::createFromFormat 验证年份

转载 作者:行者123 更新时间:2023-12-02 05:18:20 24 4
gpt4 key购买 nike

我有这个代码块,用于在使用 DateTime::createFromFormat() 提交到数据库插入之前验证格式正确的日期.我期望日期格式将“DD/MM/YYYY”转换为“YYYY-MM-DD”,否则会引发错误。

$dateofbirth = trim($_POST['dateofbirth']);
$date = DateTime::createFromFormat('d/m/Y', $dateofbirth);

$date_errors = DateTime::getLastErrors();
var_dump($date_errors);
if ($date_errors['warning_count'] + $date_errors['error_count'] > 0) {
$dobError = 'Date '.$dateofbirth.' is not a valid DD/MM/YYYY format.';
$hasError = true;
} else {
$mysql_dob = $date->format('Y-m-d');
}
error_log($dateofbirth.' -> '.$mysql_dob);

这个日期有效

 $dateofbirth = '30/11/1980'; => 1980-11-30

但是这个默默地失败了

 $dateofbirth = '30/11/80'; => 0080-11-30

因为我希望收到缺少世纪数字的通知。我已阅读格式规则并使用大写字母“Y”,这应确保年份为 4 位数字。知道我哪里出错了吗?

编辑

1 - 根据 OneTrickPony 的评论更正测试日期

2 - 我添加了 $date_errors 变量的 var_dump。由于格式为“d/m/Y”且输入为“30/11/80”,我期待出现错误或警告,但我没有收到。

array(4) {
["warning_count"]=>
int(0)
["warnings"]=>
array(0) {
}
["error_count"]=>
int(0)
["errors"]=>
array(0) {
}
}
30/11/80 -> 0080-11-30

最佳答案

来自 DateTime::createFromFormat 的文档

http://www.php.net/manual/en/datetime.createfromformat.php

Returns a new DateTime instance or FALSE on failure.

因此,与其检查 getLastErrors,不如检查 $date === false

将错误检查更改为:

if ($date === false) {
$dobError = 'Date '.$dateofbirth.' is not a valid DD/MM/YYYY format.';
$hasError = true;
} else {
$mysql_dob = $date->format('Y-m-d');
}

关于php - 使用 DateTime::createFromFormat 验证年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16322157/

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