使用 new Date(), 返回的时间与本地的时间相差 8 个小时 (在中国)
console.log(new Date())
getTimezoneOffset()
返回 UTC 时间与当前时区的时间差值 (UTC Time - cur Time)
new Date().getTimezoneOffset()
使用 Date
构造函数来解析日期字符串, 会被解析为 UTC 而不是本地时间, 于是乎, -getTimezoneOffset()
(cur Time - UTC Time) 可以补回来
const offsetTime = new Date().getTimezoneOffset() * 1000 * 60
console.log(new Date(new Date().getTime() - offsetTime))
另外, 通过 date.getHours()
等 api,可以获取到本地时间
自己写的函数, 如下
如果存在输入, 解析当前时间, 通过 get 等 api 返回时间, 可根据实际情况处理字符, 如有更优雅的写法, 欢迎留言
const getLocalTime = (data) => {
const t = data ? new Date(data) : new Date()
const timeArr = [t.getFullYear(), t.getMonth() + 1, t.getDate(), t.getHours(), t.getMinutes(), t.getSeconds()].map(e => e < 10 ? '0' + e : e)
const date = timeArr.slice(0, 3).join('-')
const time = timeArr.slice(3).join(':')
return `${date} ${time}`
}
结合我当前编写的工具函数, 来看个题目
给定一个时间字符串和操作, 输出对应时间, 操作规则如下
+/-3W 加或减3周
+/-3d 加或减3天
+/-3h 加或减3小时
+/-3m 加或减3分钟
+/-3s 加或减3秒
例子如下
const time = '2022-03-31 00:00:00'
const operation = '+5d +9h'
console.log(handlerTime(time, operation))
输出结果为
2022-04-05 09:00:00
时间数据格式转化, 一个比较容易的办法就是将其转为时间戳
, 进行操作后, 再转为时间
const timeMap = {
W: 1000 * 60 * 60 * 24 * 7,
d: 1000 * 60 * 60 * 24,
h: 1000 * 60 * 60,
m: 1000 * 60,
s: 1000
}
const handlerTime = (time, operation) => {
time = Date.parse(time)
operation.split(' ').forEach(op => {
const addTime = (op[0] === '+' ? 1 : -1) * op.slice(1, -1) * timeMap[op[op.length - 1]]
time += addTime
});
return getLocalTime(time)
}