2 回答
TA贡献1780条经验 获得超5个赞
IntlDateFormatter 的日期格式错误,您需要ICU 格式。
最好使用常量而不是整数。
$dateStr = '2019-09-18 18:58:08';
$t = new \IntlDateFormatter('en_US', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Asia/Shanghai' ,IntlDateFormatter::GREGORIAN, 'yyyy-MM-dd HH:mm:ss');
$t->setLenient(false);
$timestamp = $t->parse($dateStr);
//turn timestamp back to string
$dateStrFromTs = date_create(null,new \DateTimeZone('Asia/Shanghai'))
->setTimestamp($timestamp)
->format('Y-m-d H:i:s')
;
var_dump($dateStrFromTs === $dateStr); //bool(true)
TA贡献1878条经验 获得超4个赞
首先,让我们摆脱幻数和间接检查,以确保:
$t = new \IntlDateFormatter(
'en_US',
IntlDateFormatter::MEDIUM,
IntlDateFormatter::MEDIUM,
new DateTimeZone('Asia/Shanghai'),
IntlDateFormatter::GREGORIAN,
'Y-m-d H:i:s');
$t->setLenient(false);
$timestamp = $t->parse('2019-09-18 18:58:08');
var_dump(date('r', $timestamp));
这打印 Fri, 18 Jan 2019 11:09:00 +0100. 那么,有什么关系呢?
问题是最后一个构造函数参数。您理所当然地认为格式代码与 eg 中的相同,date()但这不是文档所说的:
格式化或解析时使用的可选模式。可能的模式记录在 » http://userguide.icu-project.org/formatparse/datetime。
Y
表示“一年中的一周”。m
表示一小时内的分钟。
... 等等。
- 2 回答
- 0 关注
- 149 浏览
添加回答
举报