项目中时间处理

判断两个时间之间隔多少天

产生这个问题的原因是在开发项目过程中,产品临时提的一个小需求:用户提前三天预约并且不只能预约工作日的时间

对这个需求进行分析可以解析出两个问题点:

  • 判断用户选择的时间和当前时间是否超过三天;
  • 用户选择的时间是否不是工作日;

既然把需求剖析清楚了,那就挨个解决问题吧!

首先,解决第一个问题:判断用户选择的时间和当前时间是否超过三天

怎么来判断用户选择的时间和当前时间是否超过来三天呢?

这里写了一个公共的方法,直接传入当前时间段和选择的时间段

function isThreeDaysApart(dateStr1, dateStr2) {
//我这里传入两个日期,日期格式为‘年-月-日’
  const dayInMs = 24 * 60 * 60 * 1000; // 一天的毫秒数
//这里是把传入的日期在统一格式话成统一时间段
  const date1 = new Date(dateStr1);
  const date2 = new Date(dateStr2);
//这里是第二个日期减去第一个日期得到的毫秒数
  const timeDiff = Math.abs(date2.getTime() - date1.getTime())
//得到的毫秒数除以一天的毫秒数,就得到了具体天数
  const daysDiff = Math.floor(timeDiff / dayInMs);

  return daysDiff > 3;
}

第二个问题:用户选择的时间是否不是工作日

那如何判断选择的时间是不是工作日呢?

function isWeekend(dateStr) {
//同样,这里也是格式化一下时间
  const date = new Date(dateStr);
//这里用到了js的getDay()这个方法,根据一个时间来返回一周里的那天,0表示的是周日,依次类推,我们这里需要判断的是0和6
  const dayOfWeek = date.getDay();
  return dayOfWeek === 0 || dayOfWeek === 6;
}

这里如果是周六或周日的话就会返回成true,那这里我们要判断不是周六和周日就反选一下,

两个公共方法已经写出来了,现在只要调用这两个方法就可以了

声明两个变量来调用这两个方法:

const a = isThreeDaysApart(dateStr1, dateStr2)
const b = this.isWeekend(dateStr)
//进行判断一下
if(a && !b){
console.log('选择的时间合理')
}else{
console.log('请提前三天选择工作日时间')
}

到这里就完全实现了这个功能!!!

时间格式化

写一个公共方法:传入一个时间,再传入一个想要的时间格式就可以实现时间格式化

function formatDate(date, format) {
//date是传入的时间,format是传入的时间格式,可以是‘yyyy-MM-dd hh:mm:ss’,根据自己想要的格式往里传就可以了
  const y = date.getFullYear()
  const M = date.getMonth() + 1
  const d = date.getDate()
  const h = date.getHours()
  const m = date.getMinutes()
  const s = date.getSeconds()

  format = format.replace('yyyy', y)
  format = format.replace('MM', M.toString().padStart(2, '0'))
  format = format.replace('dd', d.toString().padStart(2, '0'))
  format = format.replace('hh', h.toString().padStart(2, '0'))
  format = format.replace('mm', m.toString().padStart(2, '0'))
  format = format.replace('ss', s.toString().padStart(2, '0'))

  return format
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值