我有一个像这样的字符串"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)来改变时间?
我发现完全相同的行为,这对我来说似乎是一个错误,因为 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();
Run Code Online (Sandbox Code Playgroud)
JSFiddle:http://jsfiddle.net/0qw54nrb/
这确实是一个错误,我在这里提交了。只要您有时间回退到浏览器的解析器,就会发生此问题。如果在运行此代码时在浏览器的调试控制台中进行监视,则会看到以下警告:
弃用警告:构建时间回落到js日期。不建议这样做,并将在即将发布的主要版本中将其删除。请参阅https://github.com/moment/moment/issues/1407了解更多信息。
警告是正常的,告诉您不要以回落到JavaScript Date对象的解析器的方式使用moment 。您可以通过提供格式字符串来避免这种情况。
通常,以m / d / y格式传递没有格式字符串的值是一个坏主意,因为并非所有用户都将在其浏览器中具有该格式设置。像1/4/2014这样的值可以解释为1月4日或4月1日。
要明确告知要解析为特定格式的时刻,请像这样传递格式字符串:
moment.utc("10/14/2014 5:30:00 AM", "M/D/YYYY h:mm:ss a")
Run Code Online (Sandbox Code Playgroud)