时刻.js转换没有效果

moment.js conversions having no effect

本文关键字:有效果 转换 js 时刻      更新时间:2023-09-26

我有一个输入字段,用户需要在其中选择日期/时间本地计算机将始终处于 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);

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

 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
相关文章: