javascript - moment.js 转换无效

标签 javascript timezone momentjs

我有一个输入字段,要求用户选择日期/时间 本地计算机将始终采用 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

关于javascript - moment.js 转换无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38371617/

相关文章:

javascript - 迭代日期数组的函数会产生意想不到的结果

arrays - 如何确保 knockout 可观察数组保持排序?

javascript - 测试元素是否在前面的简单方法?

javascript - Angular JS 下拉菜单使用 ng-click 和 ng-show 显示动态内容?

javascript - 如何获取同一字符的第 n 次和第 n 次出现之间

javascript - UTC 到 EST Moment.js

Java 时区 - IST 的奇怪行为?

javascript - 如何在 Chrome 开发工具中的网站 javascript(即不是您的)上设置断点?

datetime - 如何从 Twitter API 可靠地确定用户的时区?

javascript - 为什么在使用时区时,momentjs 中的 isSame 方法无法正常工作?