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

时间:2018-08-22 10:10:39

标签: php date datetime iso8601

我将以下字符串与'T'分隔符-如何正确更改$format变量以考虑$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

1 个答案:

答案 0 :(得分:1)

您可以转义(\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这样的日期会返回一个对象,但是无效。