我有一个像"10/14/2014 5:30:00 AM"
这样的字符串。我需要将其解析为UTC字符串。但是当我执行moment.utc("10/14/2014 5:30:00 AM").format()
时,我得到了"2014-10-13T22:30:00+00:00"
,而我希望得到的是"2014-10-14T12:30:00+00:00"
。
如何才能让momentJS相信我的字符串是UTC字符串,并在不根据本地时区(在我的例子中是+7)移动时间的情况下解析它?
发布于 2014-10-14 17:21:11
这确实是一个bug,而且是I filed it here。每当您允许moment回退到浏览器的解析器时,问题就会发生。如果在运行此代码时查看浏览器的调试控制台,您将看到以下警告:
弃用警告: moment构造回落到js Date。这是不鼓励的,并将在即将到来的主要版本中删除。有关更多信息,请参阅https://github.com/moment/moment/issues/1407。
该警告是正常的,它告诉您不要以返回到JavaScript Date
对象的解析器的方式使用moment。您可以通过提供格式字符串来避免这种情况。
通常,以m/d/y格式传递值而不使用格式字符串不是一个好主意,因为并非所有用户都会在其浏览器中具有该格式设置。像1/4/2014这样的值可以解释为1月4日或4月1日。
为了显式地告诉moment以特定格式进行解析,pass the format string如下所示:
moment.utc("10/14/2014 5:30:00 AM", "M/D/YYYY h:mm:ss a")
发布于 2014-10-14 00:15:53
我发现完全相同的行为,这对我来说似乎是一个bug,因为utc()不应该推断一个不存在的时区。
解决方案是在调用utc()
之前重新格式化日期。我发现数组语法和ISO 8601格式工作得很好:
// Array format - Works
moment.utc([2014, 10, 14, 10, 05]).format()
// Nope
moment.utc("10/14/2014 5:30:00 AM").format();
// ISO 8601 - Works
moment.utc("2014-10-14 05:30:00").format();
JSFiddle:http://jsfiddle.net/0qw54nrb/
https://stackoverflow.com/questions/26350652
复制相似问题