moment 时间转换

时间戳, 时区, 小时 的区别

  • 时间戳零时区的, 但是显示出来日期/小时/分钟是有时区的.
  • 从一个时间戳实例一个 Date 对象或者 moment 对象后, 改变这个对象的时区不会改变它的 valueOf() 出来的值

moment 默认值

  • 默认情况下, time1 = moment(x) 构造一个实例, 在这个实例上利用 time1.hours() 得到的时间时本地时间
  • time2 = moment.utc(x) 构造实例, time2.hours() 得到的小时是零时区的小时
  • 不管什么时区, 他们内在的时间戳都相等. 即 time1.valueOf() === time2.valueOf()

更改 moment 显示的时区

  • 构造代表指定时区的 moment 实例: time3 = moment.utc(x).utcOffset(timezone)
  • 其中 timezone 的格式为 '+0800'
  • 在这个实例上获取的小时等数据就是 timezone 那个时区的

例子

时间戳->格式化的时间

以时间戳 x1 = 1525104000000 为例, 且当前系统时区/浏览器时区为 +0800

  • 获取北京时间的格式化年月日: moment(x1).format('YYYY/MM/DD') => '2018/05/01'
  • 获取北京时间的格式化小时/分钟: moment(x1).hours()/minutes() => '0', '0'
  • 获取日本时间的格式化年月日: moment.utc(x1).utcOffset('+0900').format('YYYY/MM/DD') => '2018/05/01'
  • 获取日本时间的格式化年月日: moment.utc(x1).utcOffset('+0900').hours() => '1'

格式化的时间 -> 时间戳

以北京时间 time = '2018/05/01 08:00' 为例, 且当前系统时区/浏览器时区为 +0800

  • 获取该时间的时间戳: moment(time).valueOf() => 1525132800000
  • 获取东京时间05/01 08:00的时间戳: moment(${time}+0900).valueOf() => 1525129200000 (请务必注意加号和时间直接不留空格)