我从API获取日期对象。这是API返回的格式:
" 2016-04-05 13:39:46.612"
Chrome似乎解释了这一点并正确显示,但在Firefox,Safari和IE中,我得到的是null或无效的日期。
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'}} 输出:null
我尝试使用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来使解析保持一致,因为我已经在我的代码中的其他地方使用了它。
答案 0 :(得分:0)
我认为我有类似的问题,对我来说最好的解决方案是使用momentjs库来解析日期字符串:
bower install --save moment
然后例如:
$scope.purchaseDate = moment("2016-04-05 13:39:46.612", "YYYY-MM-DD HH:mm:ss.SSS").toDate();
请在此处查看解析格式:http://momentjs.com/docs/#/parsing/string-format/
HTML页面中的例如:
{{purchaseDate | date:'medium'}}
请注意,momentjs会处理您当地的时区,并且日期会相应更改
我希望它有所帮助。
答案 1 :(得分:0)
如果您要使用角度刻度,则还应使用angular-moment。
加载值时,请创建moment
对象而不是Date
对象。
var purchaseDate = moment("2016-04-05 13:39:46.612");
此特定格式已被moment.js识别,因此您在解析时无需提供格式字符串。虽然请注意它将被解释为 local 时间。如果你想用UTC代替它,那么:
var purchaseDate = moment.utc("2016-04-05 13:39:46.612");
无论哪种方式,您都可以使用角度矩来格式化它:
{{$scope.purchaseDate | amDateFormat:'MMM D, Y h:mm a'}}
如果您愿意,Angular-moment还可以提供许多其他过滤器。 Check out their docs