javascript - Date 对象在 Chrome 中有效,但在 Safari、Firefox 或 IE 中无效

标签 javascript angularjs date momentjs date-formatting

我正在从 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 View 中的 HTML:{{$scope.purchaseDate |日期:'MMM d, y h:mm a'}} 输出:2016 年 4 月 5 日下午 1:39

Firefox 结果(Safari 和 IE 类似):

console.log(purchaseDate) 
>> Invalid Date

Angular View 中的 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 来使解析保持一致,因为我已经在代码中的其他地方使用了它。

最佳答案

如果您要使用 Angular 力矩,您还应该使用 angular-moment .

加载值时,创建一个 moment 对象而不是 Date 对象。

var purchaseDate = moment("2016-04-05 13:39:46.612");

这种特殊格式已经被 moment.js 识别,因此在解析时不需要提供格式字符串。但请注意,它将被解释为本地时间。如果您希望使用 UTC 格式,则:

var purchaseDate = moment.utc("2016-04-05 13:39:46.612");

无论哪种方式,您都可以使用 Angular 矩来格式化它:

{{$scope.purchaseDate | amDateFormat:'MMM D, Y h:mm a'}} 

Angular-moment 还提供了许多其他过滤器,您可以根据需要使用。 Check out their docs .

关于javascript - Date 对象在 Chrome 中有效,但在 Safari、Firefox 或 IE 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36439275/

相关文章:

javascript - 如何仅在使用 angularJS 单击按钮时显示输入字段?

c# - 在 C# 中使用日期对字符串列表进行排序

Java - 如何允许用户选择日期范围,然后检查日期范围是 7 天还是 14 天?

javascript - document.submit() 在 IE 中不工作(在 chrome、ff 和 safari 中工作)

javascript - 以数组形式返回对象的所有键或值的函数

javascript - 单击不同图像时播放不同的歌曲

javascript - 如何仅在字段为 $dirty 时应用 ng-pattern

node.js - 如何替换 ObjectId 引用。与来自 MongoDB 的实际对象一起使用(最好在服务器端)?

javascript - HTML 表格无法正确呈现

mysql - SQL 查询选择前 14 个月,如果缺少任何月份,则添加金额 '0'