【发布时间】:2016-04-06 00:13:53
【问题描述】:
我正在从 API 获取日期对象。以下是 API 返回的格式:
“2016-04-05 13:39:46.612”
Chrome 似乎可以解释并正确显示它,但在 Firefox、Safari 和 IE 中,我得到的不是空日期就是无效日期。
Chrome 结果:
console.log(purchaseDate)
>> Tue Apr 05 2016 13:39:46 GMT-0500 (CDT)
Angular 视图中的此 HTML:{{$scope.purchaseDate |日期:'MMM d, y h:mm a'}} 输出:2016 年 4 月 5 日下午 1:39
Firefox 结果(Safari 和 IE 类似):
console.log(purchaseDate)
>> Invalid Date
Angular 视图中的此 HTML:{{$scope.purchaseDate |日期:'MMM d, y h:mm a'}} 输出:空
我尝试在将日期发送到浏览器之前使用 moment.js 格式化日期(如类似问题的答案中所建议的那样),但结果并没有好多少:
Chrome 结果:
console.log(moment(purchaseDate).format())
>> 2016-04-05T13:39:46-05:00
Firefox 结果(Safari 和 IE 类似):
console.log(moment(purchaseDate).format())
>> Invalid Date
有什么想法吗?我想使用 moment.js 来获得一致的解析,因为我已经在我的代码中的其他地方使用它。
【问题讨论】:
-
第一次调用时应该将格式传递给moment.js,否则解析字符串时只是猜测。
-
如果这真的是直接从 API 中以字符串形式出现的格式,那么返回 API 并将其更改为类似 ISO-8601 之类的合理格式。但是,我的猜测是您已经将 API 结果解析为
Date对象,并且您实际上正在查看Date到string的隐式转换。您确定这就是 API 中的确切字符串吗?查看原始 HTTP。 -
你能影响你的 API 返回什么吗?如果是,最好的解决方案是不以这种格式返回数据,这太疯狂了。
-
你能显示你设置
purchaseDate的代码吗? -
好电话,@MattJohnson,原始响应实际上是“2016-04-05 13:39:46.612”。我已经更新了问题。
标签: javascript angularjs date momentjs date-formatting