PHP 验证 ISO 8601 日期字符串
2022-08-30 18:10:19
如何验证 ISO 8601 日期字符串(例如:2011-10-02T23:25:42Z)。
我知道ISO 8601日期有几种可能的表示形式,但我只对验证我上面给出的示例格式感兴趣。
谢谢!
如何验证 ISO 8601 日期字符串(例如:2011-10-02T23:25:42Z)。
我知道ISO 8601日期有几种可能的表示形式,但我只对验证我上面给出的示例格式感兴趣。
谢谢!
这对我有用,它使用正则表达式来确保日期采用所需的格式,然后尝试解析日期并重新创建它以确保输出与输入匹配:
<?php
$date = '2011-10-02T23:25:42Z';
var_dump(validateDate($date));
$date = '2011-17-17T23:25:42Z';
var_dump(validateDate($date));
function validateDate($date)
{
if (preg_match('/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/', $date, $parts) == true) {
$time = gmmktime($parts[4], $parts[5], $parts[6], $parts[2], $parts[3], $parts[1]);
$input_time = strtotime($date);
if ($input_time === false) return false;
return $input_time == $time;
} else {
return false;
}
}
您可以进一步扩展以使用checkdate,以确保月日和年也有效。
我想分享我的轻量级解决方案。这并不理想,但可能对某人有所帮助。
function validISO8601Date($value)
{
if (!is_string($value)) {
return false;
}
$dateTime = \DateTime::createFromFormat(\DateTime::ISO8601, $value);
if ($dateTime) {
return $dateTime->format(\DateTime::ISO8601) === $value;
}
return false;
}
阿登特!
某些有效的 ISO8601 日期将失败查看下面的列表
NOT VALID --> '' // Correct
NOT VALID --> 'string' // Correct
VALID --> '2000-01-01T01:00:00+1200' // This is the only format function returns as valid
NOT VALID --> '2015-01 first' // Correct
NOT VALID --> '2000-01-01T01:00:00Z' // Must be valid!
NOT VALID --> '2000-01-01T01:00:00+01' // Must be valid!