moment.js的一些使用小场景

1、获取包括今天之内的后七天

const dateAfterDays = (num = 7, format = 'MM-DD') => {
  let days = []
  for (let i = 0; i< num; i++) {
    const day = moment().add(i, 'days').format(format)
    days.push(day)
  }
  return days
}
// 例如今天是11.17那返回的结果就是
// ['11.17', '11.18', '11.19', '11.20', '11.21', '11.22', '11.23']
// 如果你想从明天开始的后七天,那么 moment().add()第一个参数就从1开始,以此类推

2、获取包括今天之内的后七天对应的星期
注意:moment返回的星期只是对应的数值,例如周日是0,周一是1,。。。周六是6,这里需要我们自己转一下

const WEEK_ENUM = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
const dataAfterWeek = (num = 7) => {
  let weeks = []
  const days = this.dateAfterDays(num, 'YYYY-MM-DD')
  for (let i = 0; i< days.length; i++) {
    const week = moment(days[i]).day()
    weeks.push(WEEK_ENUM[week])
  }
  return weeks
}
// 例如今儿是周四,那么返回的结果就是
// ['周四', '周五', '周六', '周日', '周一', '周二', '周三']

3、判断一个时间在不在某个时间范围内
我这的一个需求场景:
例如今天是2022-11-17
* 如果是今日早上8点之前,则为2022-11-16 20:00:00
* 早上8点到晚上8点之间,则为2022-11-17 08:00:00
* 如果是晚上8点之后,则为2022-11-17 20:00:00

const compareTime = () => {
  let resultTime = ''
  // 当前日期
  let date = moment().format('YYYY-MM-DD')
  // 当前日期的前一天
  let beforeDate = moment().subtract(1, 'days').format('YYYY-MM-DD')
  /*
  * 判断时间范围
  */
  // 格式化当前时间
  let datetime = moment().format('YYYY-MM-DD HH:mm:ss')
  // 如果当前日期在当天的0点至早上8点
  let beforeFlag = moment(datetime).isBetween(`${date} 00:00:00`, `${date} 08:00:00`, null, '[]')
  if (beforeFlag) {
    resultTime = `${beforeDate} 20:00:00`
  }
  // 如果当前时间在早上8点到20点之间  () 表示既不包含前一个时间,也不包含后一个时间,这里表示当日早上八点到晚上8点 开区间
  let currentFlag = moment(datetime).isBetween(`${date} 08:00:00`, `${date} 20:00:00`, null, '()')
  if (currentFlag) {
    resultTime = `${date} 08:00:00`
  }
  // 如果当前时间在20点之后 [] 表示包含前后两个时间,包含当日晚上8点到晚上24点 闭区间
  let afterFlag = moment(datetime).isBetween(`${date} 20:00:00`, `${date} 23:59:59`, null, '[]')
  if (afterFlag) {
    resultTime = `${date} 20:00:00`
  }
  return resultTime
},

注:moment的isBetween方法的第四个参数,是’()‘、’(]‘、’[)‘、’[]’ 区间是开是闭,视自己的需求情况而定。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值