【问题标题】:Creating UTC time in momentjs is returning weird results在 momentjs 中创建 UTC 时间会返回奇怪的结果
【发布时间】:2014-09-29 19:49:17
【问题描述】:

我在星期一晚上撕毁了我的听力!谁能帮我理解下面的问题? 我的浏览器上有以下字符串01-09-2014(这是当地时间),我想将其转换为 UTC,以便我可以将其保存回服务器。 这是我正在做的事情:

    var localDate = moment("01-09-2014", "DD-MM-YYYY");
    var utcDate = localDate.utc();
    console.log("Local Date " + localDate.toDate() + " UTC Date " + utcDate.toDate());

奇怪的是,最后一行输出:

Local Date Mon Sep 01 2014 00:00:00 GMT+0200 (Romance Daylight Time) UTC Date Mon Sep 01 2014 00:00:00 GMT+0200 (Romance Daylight Time) 

问题

  • 为什么 UTC 日期看起来与本地日期完全相同(鉴于我在 GMT+2 区域,我预计本地时间比 UTC 时间早 2 小时)?
  • 为什么 UTC 日期有 GMT+0200?我希望 UTC 日期为 GMT+000

你能帮我解决这两个问题吗?

【问题讨论】:

    标签: javascript datetime momentjs


    【解决方案1】:

    虽然我不确定......但我认为应该是:

    var utcDate = localDate.utc().format()
    

    见:

    http://momentjs.com/docs/#/parsing/utc/

    更新

    小提琴:

    http://jsfiddle.net/qhk9tnLr/2/

    JS:

    console.log("Local Date: " + moment("01-09-2014", "DD-MM-YYYY").toDate());
    console.log("UTC Date: " + moment("01-09-2014", "DD-MM-YYYY").utc().format("ddd MMM DD YYYY HH:mm:ss zZZ"));
    

    输出:

    Local Date: Mon Sep 01 2014 00:00:00 GMT+0200
    UTC Date: Sun Aug 31 2014 22:00:00 UTC+0000
    

    结论:

    toDate() 将给出当地时间 - 获取 UTC 使用 utc().format()

    【讨论】:

    • 感谢您的回答,格式输出一个字符串,我想要的是一个javascript日期对象。更糟糕的是,format 返回一个比 8-) 晚一天的日期字符串
    • 是的-但是您将获得所需的价值...请参阅我的更新答案:)
    • @GETah - JS Date 对象总是将使用本地计算机的时区。一旦你调用toDate(),你就会撤销moment 的utc 函数的效果。无论如何,您都不能将 Date 对象传递给服务器。最终,您必须将其格式化为字符串,因此您应该只使用 moment 的 formattoISOString 函数。
    • 嗯,这变得更有趣了...现在甚至本地日期的 GMT 偏移量也设置为 0 Local Date 2014-08-31T22:00:00+00:00 UTC Date 2014-08-31T22:00:00+00:00 知道为什么会发生这种情况吗?
    猜你喜欢
    • 1970-01-01
    • 2013-07-31
    • 2012-05-28
    • 2012-08-08
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多