获取时区 这样获得到的是 +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}`;
}
转换成 某 时区
- dayjs 内部会自动进行时区计算
- 也就是说,当你传入一个时间字符串
2024-07-30 10:03:04, 他就会变成 你local的时区 - 那么,假如当你传入了一个 +4 时区的时间, 你本地时区是 +8, 你想转换成 -10 时区的时间,怎么操作呢?
- 最简单的方式,自行带上时区,在尾部加上时区效果如下
2024-07-30T10:03:04+04:00- 然后当执行这行代码
dayjs(2024-07-30T10:03:04+04:00).format(), dayjs在内部自动转成当前时区的时间。 - 你就会得到:
2024-07-30T18:03:04+08:00,这是本地时间 - 如果你想转成-10, 那么就要用到 utcoffset(),代码如下
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')