php - DateTime::createFromFormat 不工作 (PHP 7.2)
问题描述
嗨,
我在创建 DateTime 对象时遇到了一些问题:
DateTime::createFromFormat(DateTime::RFC3339_EXTENDED, '2018-07-30T20:03:25.000+02:00')
或者这样:
DateTime::createFromFormat(DateTime::RFC3339_EXTENDED, '2018-07-30T20:03:25.000+02:00', $ev = new DateTimeZone('Europe/Vienna'))
这是我在这两种情况下得到的错误:
"errors" => array:2 [▼
20 => "The format separator does not match"
21 => "The timezone could not be found in the database"]
有人建议我做错了什么?
谢谢!
解决方案
DateTime::createFromFormat
不幸的是,不支持所有 PHP 的日期格式字符,包括v
毫秒。RFC3339_EXTENDED
解析为Ymd\TH:i:s.vP,其中包含此字符 - 其效果是该常量不能用于解析日期,只能用于显示它们。
一种解决方法是使用包含u
格式字符(微秒)的手动格式字符串,如下所示:
$d = DateTime::createFromFormat('Y-m-d\TH:i:s.uP', '2018-07-30T20:03:25.000+02:00');
echo $d->format('Y-m-d H:i:s');
// 2018-07-30 20:03:25
注意:显然这意味着微秒值将比它应该的值小 1000 倍 - 如果这个粒度级别很重要,那么你需要在返回对象的路上将它乘以 1000。
推荐阅读
- python - 如果两列值相等,则在 Python 中创建具有 True 和 False 值的第三列
- javascript - Puppeteer:TimeoutError:等待选择器
- ios - iOS 订阅计划选项不针对特定用户显示
- javascript - 无法在 JavaScript 中调用 Jump Game 函数
- r - dyplot.prophet 科学记数法
- java - 将外部库传递给 spark-submit 命令行的正确方法是什么?
- java - 使用 JAXB 将元素添加到 XML 时出错
- php - 在 PHP/symfony5 上下载 easyadmin 包时出现问题
- azure-sql-database - 使用和保护分片数据
- javascript - 验证正则表达式 JavaScript 中的可分辨名称 (DN) 代码