javascript - 使用utcoffset后如何在momentjs中获取纪元时间

标签 javascript timezone momentjs timezone-offset

const epoch = Date.UTC(2017,09,24)

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

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

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

最佳答案

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

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

    Tue Oct 24 2017 00:00:00 GMT+0000

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

    Tue Oct 24 2017 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 偏移量中的午夜:

    Tue Oct 24 2017 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 .相反,它会创建一个等同于印度午夜 的日期,这就是结果为 24/10/2017 00:00 +05:30 的原因。 valueOf() 返回 1508783400000,这相当于 印度午夜23/10/2017 18:30 UTC(前一天下午 6:30,因此该值低于原始值)。

关于javascript - 使用utcoffset后如何在momentjs中获取纪元时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46564738/

相关文章:

javascript - 在 react 组件之间传递数据

javascript - 使用 x.fromNow(); 在 moment.js 中获取天数作为数字;

javascript - AngularUI Router + Ionic - 路由可以在浏览器中工作,但不能在 Ionic View 中工作?

php - 如何获取印度时区的时间?

Javascript Date() 时区不一致

mysql - zend 框架中国际网络应用程序的时区

javascript - MomentJS - 没有始终如一地给出正确的输出

javascript - JSPM 服务器错误 : Change occurred to a file outside SystemJS loading

c# - YouTube 播放器不在播放列表中显示视频信息

javascript - 使用 JS/jQuery 修改 HTML 中日期/时间文本字符串的值