判断两个时间之间隔多少天
产生这个问题的原因是在开发项目过程中,产品临时提的一个小需求:用户提前三天预约并且不只能预约工作日的时间。
对这个需求进行分析可以解析出两个问题点:
- 判断用户选择的时间和当前时间是否超过三天;
- 用户选择的时间是否不是工作日;
既然把需求剖析清楚了,那就挨个解决问题吧!
首先,解决第一个问题:判断用户选择的时间和当前时间是否超过三天;
怎么来判断用户选择的时间和当前时间是否超过来三天呢?
这里写了一个公共的方法,直接传入当前时间段和选择的时间段
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
}