如何在 PHP 中正确识别此 ISO 8601 日期内的 'T' 字符

How to recognise the 'T' character correctly within this ISO 8601 date in PHP

我有以下带有 'T' 分隔符的字符串 - 如何正确更改 $format var 以考虑 $datestring 中的 'T'?

$datestring = '2018-12-30T11:30:00';
$format = 'Y-m-dG:i:s';
$date = DateTime::createFromFormat($format, $datestring);
var_dump($date); // currently returns false rather than an object

您可以转义以下格式的字符 (\T):

$datestring = '2018-12-30T11:30:00';
$date = DateTime::createFromFormat('Y-m-d\TG:i:s', $datestring);

var_dump($date);
// object(DateTime)#1 (3) { ["date"]=> string(26) "2018-12-30 11:30:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" }

如果您还需要验证日期,您可以使用 DateTime::getLastErrors:

if (!empty(DateTime::getLastErrors()['warning_count'])) {
    echo 'Date <b>' . $datestring . '</b> is invalid.<br>';
}

因为像 2018-15-46T29:63:89 这样的日期会 return 一个对象但无效。