Javascript 日期对象在Chrome中有效,但在Safari、Firefox或IE中无效
我正在从API获取日期对象。以下是API返回的格式: “2016-04-05 13:39:46.612” Chrome似乎能正确地解释并显示它,但在Firefox、Safari和IE中,我得到的不是空日期就是无效日期 铬结果:Javascript 日期对象在Chrome中有效,但在Safari、Firefox或IE中无效,javascript,angularjs,date,momentjs,date-formatting,Javascript,Angularjs,Date,Momentjs,Date Formatting,我正在从API获取日期对象。以下是API返回的格式: “2016-04-05 13:39:46.612” Chrome似乎能正确地解释并显示它,但在Firefox、Safari和IE中,我得到的不是空日期就是无效日期 铬结果: console.log(purchaseDate) >> Tue Apr 05 2016 13:39:46 GMT-0500 (CDT) console.log(purchaseDate) >> Invalid Date console.l
console.log(purchaseDate)
>> Tue Apr 05 2016 13:39:46 GMT-0500 (CDT)
console.log(purchaseDate)
>> Invalid Date
console.log(moment(purchaseDate).format())
>> 2016-04-05T13:39:46-05:00
console.log(moment(purchaseDate).format())
>> Invalid Date
角度视图中的HTML:{{$scope.purchaseDate | date:'mmmd,yh:mma'}
输出:2016年4月5日下午1:39
Firefox结果(类似于Safari和IE):
console.log(purchaseDate)
>> Tue Apr 05 2016 13:39:46 GMT-0500 (CDT)
console.log(purchaseDate)
>> Invalid Date
console.log(moment(purchaseDate).format())
>> 2016-04-05T13:39:46-05:00
console.log(moment(purchaseDate).format())
>> Invalid Date
角度视图中的HTML:{{$scope.purchaseDate | date:'mmmd,yh:mma'}
输出:空
在将日期发送到浏览器之前,我曾尝试使用moment.js设置日期格式(如对类似问题的回答中所建议的),但效果并没有太好:
铬结果:
console.log(purchaseDate)
>> Tue Apr 05 2016 13:39:46 GMT-0500 (CDT)
console.log(purchaseDate)
>> Invalid Date
console.log(moment(purchaseDate).format())
>> 2016-04-05T13:39:46-05:00
console.log(moment(purchaseDate).format())
>> Invalid Date
Firefox结果(类似于Safari和IE):
console.log(purchaseDate)
>> Tue Apr 05 2016 13:39:46 GMT-0500 (CDT)
console.log(purchaseDate)
>> Invalid Date
console.log(moment(purchaseDate).format())
>> 2016-04-05T13:39:46-05:00
console.log(moment(purchaseDate).format())
>> Invalid Date
有什么想法吗?我希望使用moment.js来获得一致的解析,因为我已经在代码的其他地方使用了它 我想我也遇到了类似的问题,对我来说,最好的解决方案是使用momentjs库解析日期字符串:
bower install --save moment
然后举例来说:
$scope.purchaseDate = moment("2016-04-05 13:39:46.612", "YYYY-MM-DD HH:mm:ss.SSS").toDate();
{{purchaseDate | date:'medium'}}
请参见此处的解析格式:
例如,在HTML页面中:
$scope.purchaseDate = moment("2016-04-05 13:39:46.612", "YYYY-MM-DD HH:mm:ss.SSS").toDate();
{{purchaseDate | date:'medium'}}
请注意,momentjs会照顾您的本地时区,并且日期会相应地更改
我希望这会有所帮助。我想我也遇到了类似的问题,对我来说,最好的解决方案是使用momentjs库解析日期字符串:
bower install --save moment
然后举例来说:
$scope.purchaseDate = moment("2016-04-05 13:39:46.612", "YYYY-MM-DD HH:mm:ss.SSS").toDate();
{{purchaseDate | date:'medium'}}
请参见此处的解析格式:
例如,在HTML页面中:
$scope.purchaseDate = moment("2016-04-05 13:39:46.612", "YYYY-MM-DD HH:mm:ss.SSS").toDate();
{{purchaseDate | date:'medium'}}
请注意,momentjs会照顾您的本地时区,并且日期会相应地更改
我希望它能有所帮助。如果你要用力矩来表示角度,你也应该用 加载值时,创建一个
时刻
对象,而不是日期
对象
var purchaseDate = moment("2016-04-05 13:39:46.612");
这个特定的格式已经被moment.js识别,所以在解析时不需要提供格式字符串。不过请注意,它将被解释为当地时间。如果您希望使用UTC格式,则:
var purchaseDate = moment.utc("2016-04-05 13:39:46.612");
无论哪种方式,都可以使用角力矩对其进行格式化:
{{$scope.purchaseDate | amDateFormat:'MMM D, Y h:mm a'}}
角力矩还提供了许多其他过滤器,如果您愿意,可以使用 如果你要用力矩来表示角度,你也应该用 加载值时,创建一个
时刻
对象,而不是日期
对象
var purchaseDate = moment("2016-04-05 13:39:46.612");
这个特定的格式已经被moment.js识别,所以在解析时不需要提供格式字符串。不过请注意,它将被解释为当地时间。如果您希望使用UTC格式,则:
var purchaseDate = moment.utc("2016-04-05 13:39:46.612");
无论哪种方式,都可以使用角力矩对其进行格式化:
{{$scope.purchaseDate | amDateFormat:'MMM D, Y h:mm a'}}
角力矩还提供了许多其他过滤器,如果您愿意,可以使用 您应该在第一次调用时将格式传递给momente.js,否则在解析字符串时只是猜测。如果这确实是直接从API以字符串形式提供的格式,那么请返回API并将其更改为类似ISO-8601的合理格式。但是,我猜想您已经将API结果解析为
Date
对象,实际上您正在查看Date
到string
的隐式转换。你确定这就是API中的字符串吗?看看原始的HTTP。你能影响你的API返回什么吗?如果是的话,最好的解决方案是不以这种格式返回数据,这太疯狂了。你能显示你设置的代码吗purchaseDate
?打得好,@MattJohnson,原始响应实际上是“2016-04-05 13:39:46.612”。我已经更新了这个问题。您应该在第一次调用中将格式传递给momente.js,否则在解析字符串时只是猜测。如果这确实是直接从API以字符串形式提供的格式,那么请返回API并将其更改为类似ISO-8601的合理格式。但是,我猜想您已经将API结果解析为Date
对象,实际上您正在查看Date
到string
的隐式转换。你确定这就是API中的字符串吗?看看原始的HTTP。你能影响你的API返回什么吗?如果是的话,最好的解决方案是不以这种格式返回数据,这太疯狂了。你能显示你设置的代码吗purchaseDate
?打得好,@MattJohnson,原始响应实际上是“2016-04-05 13:39:46.612”。我已经更新了这个问题。我尝试了这个方法,但在Chrome以外的浏览器中仍然得到空/无效日期。我明白你的意思,请尝试:$scope.purchaseDate=moment(“2016-04-05 13:39:46.612”,“YYYY-MM-DD HH:MM:ss.SSS”)。toDate();我尝试过这个方法,但在Chrome以外的浏览器中仍然得到空/无效日期。我明白你的意思,请尝试:$scope.purchaseDate=moment(“2016-04-05 13:39:46.612”,“YYYY-MM-DD HH:MM:ss.SSS”)。toDate();我相信角力矩可以将弦转化为你们的力矩。不需要预处理。虽然很长时间没有使用它了,所以不要引用我的话。@MaggiePint-很好的观点。它可以直接解析字符串。我认为它也适用于矩对象或日期对象,但已经有一段时间没有测试过了。阅读源代码,它看起来像是直接传递给本用例中的矩构造函数。因此,字符串、矩、日期、以毫秒为单位的整数和ASP.NET丑陋的日期字符串都应该可以工作。若你们在秒内有整数的话,你们必须做些别的事情。我相信角力矩可以把字符串转换成力矩。不需要预处理。虽然很长时间没有使用它了,所以不要引用我的话。@MaggiePint-很好的观点。它可以直接解析字符串。我认为它也适用于矩对象或日期对象,但已经有一段时间没有测试过了。阅读源代码,它看起来像是直接传递给本用例中的矩构造函数。所以,字符串,矩,日期,整数,单位为mi