【问题标题】:moment.js conversions having no effectmoment.js 转换无效
【发布时间】:2016-07-14 10:19:54
【问题描述】:

我有一个输入字段,用户需要在其中选择日期/时间 根据一年中的时间,本地计算机将始终处于 GMT 或 BST。

对于那些不了解英国时间恶作剧的人:

GMT(格林威治标准时间)始终等于 UTC

BST(英国夏令时)在夏季月份为 GMT+1

用户输入的日期将存储在设置为 GMT 的数据库中,因此永远不会偏移时间。因此,我需要将用户输入的内容转换为 GMT / UTC。

但是我的转换导致返回相同的日期。

我做错了什么?

https://jsfiddle.net/r68owagL/

这是来自 jsFiddle 的代码

function log(obj) {
    var html = "<table>"
    for(var member in obj)
    {
        html += "<tr>"
              + "<td>" + member + ": </td>"
              + "<td>" + obj[member].format("YYYY-MM-DD HH:mm:ss") + "</td>"
              + "</tr>";
    }
    html += "</table>";
    document.body.innerHTML = html;
}

var strDate = '2016-07-14 10:51:00';
var obj = {
  n: moment(strDate),                    //Gives: 2016-07-14 10:51:00
  u: moment.utc(strDate),                //Gives: 2016-07-14 10:51:00
  b: moment.tz(strDate, "Europe/London") //Gives: 2016-07-14 10:51:00
}

log(obj);

【问题讨论】:

    标签: javascript timezone momentjs


    【解决方案1】:

    如果您删除格式字符串并像这样输出日期

     obj[member].format() 
    

    然后就是这样输出

    n:  2016-07-14T10:51:00+02:00
    u:  2016-07-14T10:51:00+00:00
    b:  2016-07-14T10:51:00+01:00  
    

    所以自定义格式字符串只输出日期而不考虑偏移量。考虑到它们,在打印出来之前将其转换为 UTC

    obj[member].utc().format("YYYY-MM-DD HH:mm:ss")
    

    导致

    n:  2016-07-14 08:51:00
    u:  2016-07-14 10:51:00
    b:  2016-07-14 09:51:00
    

    【讨论】:

    • 足够接近让我更正我的代码:jsfiddle.net/r68owagL/1,因此将其标记为答案。基本上设置日期然后 .utc() 它。而不是 .utc() 然后设置日期 - 现在我想是有道理的 - 这样做我的方式是说这是一个 UTC 日期,而不是这是一个本地日期。
    • 进一步更新,似乎从英国格式 dd/mm/yyyy HH:mm:ss 的 中读取用户选择的值导致 moment.js 给出相同的值发布再次转换。 jsfiddle.net/r68owagL/2 为了解决这个问题,我必须手动将格式设置为 yyyy-MM-dd HH:mm:ss,然后再将其传递给 moment()。
    • @Morvael,您会收到一个弃用警告,即构造会退回到 JS 日期。您需要为日期指定格式。然后您将不必手动解析。见momentjs.com/guides/#/warnings/js-datemomentjs.com/guides/#/parsing/known-formats
    • 感谢@MaggiePint,现在解决了这个问题; - jsfiddle.net/r68owagL/3 - 很久没有使用 moment() 了,它充满了小惊喜
    • @Morvael,如果你是图书馆的新手,我推荐:momentjs.com/guidesmaggiepint.com/2016/05/14/moment-js-shows-the-wrong-date。这两个 URL 涵盖了我在 Stack Overflow 上回答的 90% 的问题。
    猜你喜欢
    • 2019-01-26
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2014-11-17
    • 1970-01-01
    相关资源
    最近更新 更多