JS Date 使用以及工具函数

使用 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)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值