【问题标题】:How to get epoch time in momentjs after using utcoffset使用utcoffset后如何在momentjs中获取纪元时间
【发布时间】:2018-03-15 20:09:32
【问题描述】:
const epoch = Date.UTC(2017,09,24)

const moment_epoch = moment.utc(epoch).utcOffset(5.5).valueOf()

当我添加偏移量时,为什么epochmoment_epoch 会产生相同的输出?

添加偏移量后如何获取纪元时间?

【问题讨论】:

标签: javascript timezone momentjs timezone-offset


【解决方案1】:

如果您逐步检查这些值,就会更容易理解发生了什么:

  • Date.UTC(2017,09,24) 生成的时间戳相当于 2017 年 10 月 24th 日午夜,UTC (1508803200000)。
  • moment.utc(epoch) 生成 UTC 日期,相当于上面的毫秒值:

    2017 年 10 月 24 日星期二 00:00:00 GMT+0000

  • moment.utc(epoch).utcOffset(5.5) 只是将 UTC 日期转换为 +05:30 偏移量:

    2017 年 10 月 24 日星期二 05:30:00 GMT+0530

但两个日期对应于同一时刻(UTC 的午夜与 +05:30 偏移量中的凌晨 5:30 相同),因此毫秒值将相同(两者均为 1508803200000)。


不确定你到底想做什么,但无论如何:

  • 如果您想添加 5 小时 30 分钟到日期,只需执行以下操作:

    moment.utc(epoch).add(5, 'h').add(30, 'm')
    

    请注意,这不会更改偏移量。它只是得到一个比原始日期晚 5 小时 30 分钟的日期。

  • 如果你想要一个对应于午夜 +05:30 偏移的日期,你可以这样做:

    moment.utc(epoch).utcOffset(5.5, true)
    

    第二个参数tells momentjs to preserve the same local date/time,所以不是将日期/时间转换为偏移量,而是保持相同的值 - 在这种情况下,+05:30 偏移量将是午夜:

    2017 年 10 月 24 日星期二 00:00:00 GMT+0530


关于your jsfiddle link,我只是稍微改变了一下,也打印了偏移量:

moment.utc(1508803200000).format("DD/MM/YYYY HH:mm Z") // 24/10/2017 00:00 +00:00
moment.utc(1508803200000).utcOffset(5.5).format("DD/MM/YYYY HH:mm Z") // 24/10/2017 05:30 +05:30
moment.utc(1508803200000).utcOffset(5.5, true).format("DD/MM/YYYY HH:mm Z") // 24/10/2017 00:00 +05:30
moment.utc(1508803200000).valueOf() // 1508803200000
moment.utc(1508803200000).utcOffset(5.5).valueOf() // 1508803200000
moment.utc(1508803200000).utcOffset(5.5, true).valueOf() // 1508783400000

1508803200000 对应于2017-10-24T00:00:00Z(UTC 午夜)和2017-10-24T05:30+05:30(印度上午5:30)。

第一行只是获取这个UTC值,所以结果是24/10/2017 00:00 +00:00

第二行将此相同的值转换为+05:30 偏移量中的相应本地日期/时间。这不会改变纪元值(它仍然对应于1508803200000)。结果是印度的等效日期/时间,即24/10/2017 05:30 +05:30(偏移量+05:30 中的凌晨5:30,相当于UTC 中的午夜-两者都代表相同的时刻,这就是valueOf() 相同的原因) .

第三行(utcOffset(5.5, true))不会将 UTC 午夜 转换为 5:30 AM in India。相反,它会创建一个相当于印度午夜的日期,这就是结果为24/10/2017 00:00 +05:30 的原因。 valueOf() 返回 1508783400000,相当于 印度午夜UTC 时间 2017 年 23 月 10 日 18:30(下午 6:30)前一天,这就是为什么价值低于原来的价值)。

【讨论】:

  • Date.UTC(2017,09,24) 和 Date.UTC(2017,09,24, 05, 30) 为什么这会产生不同的纪元时间? moment.utc(1508803200000).utcOffset(5.5, true) 减去 moment.utc(Date.UTC(2017,09,24)) 结果是负值,应该是正数吧?
  • @Nikhil 你到底想做什么?结果应该是什么?
  • @Nikhil UTC(2017,09,24) 创建 UTC 时间 2017 年 10 月 24 日午夜,而 UTC(2017,09,24,05,30) 创建 UTC 时间 2017 年 10 月 24 日凌晨 5:30(UTC 午夜 后 5 小时 30 分钟)。 utcOffset(5.5, true) 创建 midnight in +05:30 offset,对应于 UTC 时间 2017 年 10 月 23 日(前一天)18:30,所以它发生了 5 个小时并且UTC 午夜 前 30 分钟:worldtimebuddy.com/…
  • @Nikhil 我已经更新了答案,看看现在是否更清楚了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2022-12-16
  • 2019-01-15
  • 2018-01-17
相关资源
最近更新 更多