DateTime::__construct(): 无法解析时间字符串 (131022120001Z),但值来自 openssl_x509_parse()

DateTime::__construct(): Failed to parse time string (131022120001Z) but the values comes from openssl_x509_parse()

我正在使用 openssl_x509_parse() 解析数字证书。

我编写了一个实体 class 来读取数组并转换对象中的值。

因此,对于日期我使用 \DateTime()

问题是对象创建有时不会失败,有时会失败。

因此,例如,如果我获得 Google.com 的数字证书,我将得到以下数组:

...
"validFrom" => "151118151813Z"
"validTo" => "160216000000Z"
"validFrom_time_t" => 1447859893
"validTo_time_t" => 1455580800
...

这些字符串导致错误:

DateTime::__construct(): Failed to parse time string (1474632000) at position 8 (0): Unexpected character

我不明白如何将它们转换为 DateTime 对象。我做错了什么?

字符串 151118151813Z 是日期时间,在祖鲁时区中表示为 ymdHis,您可以将其解析为:

$dt = DateTime::createFromFormat('ymdHise', '151118151813Z');
echo $dt->format('c');

demo

或者只使用unix时间戳格式1447859893:

$dt = new DateTime('@1447859893');
echo $dt->format('c');

demo

在这两个例子中你得到相同的输出。