您好我已经阅读了文档,我只是想确定我得到的日期是否正确处理了“GMT + 0200(CEST)”之后的时间。这是我的代码:ouput:
var date= moment("Mon Mar 27 2017 18:44:35 GMT+0200 (CEST)", "ddd MMM D YYYY HH:mm:ss 1").format()
console.log(date)
//output:
//2017-03-27T18:44:35+02:00
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
答案 0 :(得分:3)
不,您的格式字符串无法正确处理偏移量。
moment(String)
解析函数(请注意,只有一个参数)接受ISO 8601和RFC 2822字符串。此函数不使用format参数,因此无需在任何地方使用1
。无论如何,您的输入不符合RFC 2822,因为日期是月份名称。如果您使用moment(String)
,您将在控制台中获得 Deprecation Waring ,如下面的代码所示:
var date= moment("Mon Mar 27 2017 18:44:35 GMT+0200 (CEST)").format();
console.log(date);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
以前代码的结果在浏览器中是不一致的,因为docs表示:
警告:浏览器对解析字符串的支持不一致。因为没有关于应该支持哪种格式的规范,所以在某些浏览器中有效的功能在其他浏览器中不起作用。
正如我之前在评论中所建议的那样,您可以使用ZZ
令牌( UTC的偏移量为+-HH:mm
,+-HHmm
,使用时间String + Format解析功能,或Z
)以考虑UTC偏移。
在您的情况下,您可以将moment.utc
(ZZ
/ Z
令牌)与local()
功能合并,以正确解析您的输入:
var date= moment.utc("Mon Mar 27 2017 18:44:35 GMT+0200 (CEST)", "ddd MMM D YYYY HH:mm:ss ZZ");
// Local date, but considering input offset
console.log(date.local().format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
请注意,我的解决方案与您在帐户偏移字符串中所采用的不同,您可以使用unix()
方法对其进行测试,如下所示(如果您是UTC+2
则更改环境偏移量):
var myDate = moment.utc("Mon Mar 27 2017 18:44:35 GMT+0200 (CEST)", "ddd MMM D YYYY HH:mm:ss ZZ");
console.log(myDate.unix()); // 1490633075
var yourDate= moment("Mon Mar 27 2017 18:44:35 GMT+0200 (CEST)", "ddd MMM D YYYY HH:mm:ss 1");
console.log(yourDate.unix()); // output depends on browser offset
var targetDate = moment.utc("2017-03-27 16:44:35");
console.log(targetDate.unix()); // 1490633075
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
作为进一步的参考,您可以查看指出的Time Zone vs Offset指南:
Moment.js核心库提供与根据偏移值调整时间相关的功能。它不支持根据时区数据调整日期 - 这是由Moment TimeZone库提供的。
答案 1 :(得分:2)
要回答这个问题:不,您的格式字符串无法正确处理时区字符串。如果我在我的时区(GMT + 0100)中运行您的示例代码,我得到的结果是:2017-03-27T18:44:35+01:00
- 即看起来时刻完全忽略了时区,并且只使用本地时区。 / p>
证明:
var date= moment("Mon Mar 27 2017 18:44:35 GMT-0700 (MST)", "ddd MMM D YYYY HH:mm:ss it doesn't matter what I write here").format()
console.log(date)
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
&#13;