【问题标题】:MomentJS and timezone/UTC calculationsMomentJS 和时区/UTC 计算
【发布时间】:2018-09-30 13:38:01
【问题描述】:

我有一个来自 API 的 JavaScript 日期对象;但是当我使用 Moment 进行一些日期操作时,时区组件被搞砸了,结果日期现在使用 GMT 本地时间:

var d = new Date("2018-09-30T00:00:00+10:00");
var m1 = moment(d).toDate(); // 2018-09-29T14:00:000Z
var m2 = moment.utc(d).toDate(); // 2018-09-29T14:00:000Z

如何保留我的时区信息,以便在我开始添加天/小时等时,结果值保持在 +10:00 时区?

如果我查看在例如创建的 moment 对象Firefox 调试器,我可以看到m1_tzm:600_isUTC:false,而m2_tzm:600_isUTC:true 但在这两种情况下,包装的_d2018-09-29T14:00:000Z 而不是2018-09-30T00:00:00+10:00正如我所希望的那样。

如果我打电话:

var m3 = moment(d).format(); // 2018-09-03T00:00:00+10:00

然后一切正常,但现在我有一个 string 而不是 Date 对象

【问题讨论】:

    标签: javascript datetime momentjs


    【解决方案1】:

    definition,日期对象只是在 UTC:

    创建一个 JavaScript Date 实例,它代表一个单一的时刻 时间。日期对象基于时间值,该时间值是 自 1970 年 1 月 1 日 UTC 以来的毫秒数。

    不过,浏览器通常会将其转换为本地时间。

    我不确定您要完成什么。但是,一般来说,要在不同的时区打印日期,字符串将是一种方式。至于时区操作,Moment Timezone 可能是你要去的地方。

    话虽如此,如果您的用例很简单,您可以尝试直接解析字符串日期时刻并使用parseZone。它将允许您捕获确切的日期并获取时区信息。

    只是一个小sn-p显示这个。

    const date = '2018-09-30T00:00:00+10:00';
    
    const parseZone = moment.parseZone(date);
    console.log('Original time: ', parseZone.format());
    
    const offsetTimezone = parseZone.format('Z');
    console.log('Timezone', offsetTimezone);
    
    const utcOffset = parseZone.utcOffset();
    console.log('Offset from UTC in minutes', utcOffset);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

    【讨论】:

      猜你喜欢
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多