Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 日期对象在Chrome中有效,但在Safari、Firefox或IE中无效_Javascript_Angularjs_Date_Momentjs_Date Formatting - Fatal编程技术网

Javascript 日期对象在Chrome中有效,但在Safari、Firefox或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

我正在从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.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