[记录] dayjs关于时区转换的一些操作

974 阅读1分钟

获取时区 这样获得到的是 +1 +2 ... +8 数字形式的时区

   // 获取当前时间戳
    const timestamp = dayjs();
    // 获取UTC偏移量(以分钟为单位)
    const utcOffset = timestamp.utcOffset();
    // 将UTC偏移量转换为小时
    const hoursOffset = Math.abs(utcOffset) / 60;
    // 根据UTC偏移量确定时区
    let timeZone;
    if (hoursOffset >= 0) {
      timeZone = `+${hoursOffset}`;
    } else {
      timeZone = `${hoursOffset}`;
    }

转换成 某 时区

  1. dayjs 内部会自动进行时区计算
  2. 也就是说,当你传入一个时间字符串 2024-07-30 10:03:04, 他就会变成 你local的时区
  3. 那么,假如当你传入了一个 +4 时区的时间, 你本地时区是 +8, 你想转换成 -10 时区的时间,怎么操作呢?
  4. 最简单的方式,自行带上时区,在尾部加上时区效果如下
  5. 2024-07-30T10:03:04+04:00
  6. 然后当执行这行代码dayjs(2024-07-30T10:03:04+04:00).format(), dayjs在内部自动转成当前时区的时间。
  7. 你就会得到: 2024-07-30T18:03:04+08:00,这是本地时间
  8. 如果你想转成-10, 那么就要用到 utcoffset(),代码如下
  9. dayjs(2024-07-30T18:03:04+08:00).utc().utcOffset('-10').format('YYYY-MM-DD HH:mm:ss')

总结

  import dayjs from 'dayjs'
  import utc from 'dayjs/plugin/utc'
  import timezone from 'dayjs/plugin/timezone'

  dayjs.extend(utc)
  dayjs.extend(timezone)
  
  
  
  const targetTimezone = '-10'
  const inputTimezone = '+4'
  const date = '2024-07-30 10:03:04'
  // 将+8 转换成 +08 形式的方法
  function formatNumber(timezonestr) {
    return timezonestr.replace(/([-+])(\d+)/, (match, sign, value) => `${sign}${value.padStart(2, '0')}`)
  }
  const dateWithTargetTimezone = dayjs(date).format(`YYYY-MM-DDTHH:mm:ss${formatNumber(String(inputTimezone))}:00`)

 const result =  dayjs(dateWithTargetTimezone).utc().utcOffset(targetTimezone).format('YYYY-MM-DD HH:mm:ss')