php - php IntlDateFormatter 无法按预期工作
问题描述
代码非常简单,我想使用 IntlDateFormatter 将字符串转换为 DateTime 对象,但是结果与原始结果完全不同。我做错了什么?DateTimeToLocalizedStringTransformer
以下代码是基于Symfony4.3
<?php
//turn string to timestamp
$t = new \IntlDateFormatter('en_US', 2, 2, new DateTimeZone('Asia/Shanghai') , 1, 'Y-m-d H:i:s');
$t->setLenient(false);
$timestamp = $t->parse('2019-09-18 18:58:08');
//turn timestamp back to string
$date = new DateTime();
$date->setTimestamp($timestamp);
$date->setTimezone(new \DateTimeZone('Asia/Shanghai'));
echo $date->format('Y-m-d H:i:s') . "\n"; //output : 2019-01-18 18:09:00, why?
解决方案
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)
推荐阅读
- python - 如何在气流中回填下游任务
- angular - 从后端 api 显示来自 base64 的不同格式的图像 - 角度 7
- python - 如何在 Django Admin 上将浏览按钮上传 ImageField 更改为拖放上传
- python - 使用高级 Twitter 帐户使用 TwitterAPI 访问用户数据
- ios - 在 iOS 13 上暂停时强制重绘 AVPlayerLayer
- php - 解决wordpress模板中重复的html
- c# - 从服务引用创建 WCF 客户端时 MessageSecurityOverHttpElement 中的 IndexOutOfRangeException
- sql - 根据 SQL 的顺序对表中的每个出现进行计数
- python - 从 Tensorflow 张量获取特定索引
- oracle - 调用存储过程的Oracle游标循环