输入时间,找出3小时后的工作时间点,如果遇到休息时间,需要跳过(就是休息时间不计时),输入时间格式:2020-03-21 14:23:31
程序员文章站
2022-03-21 08:41:28
输入时间,找出3小时后的工作时间点,如果遇到休息时间,需要跳过(就是休息时间不计时),输入时间格式:2020-03-21 14:23:31输入时间范围:1900-01-01 00:00:00,2050-01-01 00:00:00工作时间:周一至周五,上午8:00至12:00,下午2:00,至18:00!!!!请注意题目各种情况 !!!!测试用例如:输入2020-03-20 14:23:31(星期五), 返回 2020-03-20 17:23:31输入2020-03-20 05:23:31(星...
输入时间,找出3小时后的工作时间点,如果遇到休息时间,需要跳过(就是休息时间不计时),输入时间格式:2020-03-21 14:23:31
输入时间范围:1900-01-01 00:00:00,2050-01-01 00:00:00
工作时间:周一至周五,上午8:00至12:00,下午2:00,至18:00
!!!!请注意题目各种情况 !!!!
测试用例如:
输入2020-03-20 14:23:31(星期五), 返回 2020-03-20 17:23:31
输入2020-03-20 05:23:31(星期五), 返回 2020-03-20 11:00:00
!!!!把各种题目可能出现情况完善测试用例,保存到代码后面!!!!
思路:将所有时间统一转为毫秒
使用getTime()获取1970 年 1 月 1 日至输入时间的毫秒数。
再拼接一个不带秒不带分钟不带小时输入时间,再获取一次
最后两个一减,得到一个输入时间当天的零头毫秒数res
这个res就是关键,如果是工作日,那就看他在哪个区间,进行判断就行了
JS Date对象:https://www.runoob.com/jsref/jsref-obj-date.html
各种情况:
- 周六就加两天到下周一11点完工
- 周日就加一天到下周一11点完工
- 工作日就判断res在哪个区间,在休息时间,就输出下一个上班时间加3小时
- 在上班时间就先加三小时看看还在不在上班时间,再就输出
- 不在就加即将休息的那段时间
FLowchart流程图
第一次写,代码冗余有点多,见谅
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
</head>
<style>
.content{
display: flex;
justify-content: center;
align-items: center;
margin-top: 300px;
}
.intput_time{
display: inline-block;
width: 400px;
height: 30px;
}
.btn{
height: 35px;
}
.res{
display: inline-block;
width: 300px;
margin-left: 500px;
margin-top: 100px;
}
</style>
<body>
<div class="content">
<input type="input" class="intput_time" placeholder="请输入时间,格式:2020-03-21 14:23:31" value="2020-12-08 00:00:31">
<button class="btn">确定</button>
</div>
<input class="res" value="2020-03-21 14:23:31"></input>
<script>
// |周一:0______8------12_____14--------18_____0周二0______8
$(".btn").click(function(){
var newdate = new Date($(".intput_time").val().replace(/-/g, "/"))//输入的时间转date对象
var newdate_sec = newdate.getTime()//设置秒数形式时间
var newdate_year = newdate.getFullYear()
var newdate_month = newdate.getMonth()+1
var newdate_day = newdate.getDate()
var newdate_hours = newdate.getHours()
var newdate_min = newdate.getMinutes()
var newdate_miao = newdate.getSeconds()
var oneDay = 1000 * 60 * 60 * 24; //一天的毫秒数
var MonWork = 1000 * 60 * 60 * 8//0-----8休息时段
var TwoWork = 1000 * 60 * 60 * 2//12----14休息时段
var ThrWork = 1000 * 60 * 60 * 6//18----24点休息时段
var Worktime1 = 1000 *60 * 60 *3 //上班三小时
var newdate_res = Date.parse(newdate_month.toString()+","+newdate_day.toString()+","+newdate_year.toString())//输入日期当天到阈值
var now_res = Date.parse(newdate)//输入日期到阈值
// console.log("最大值具1970多少秒"+now_res);2524579200000
// console.log("最小值具1970多少秒"+now_res);-2209017600000
var res = now_res-parseInt(newdate_res)//今天零点到输入时间的毫秒数
var todayZero = newdate_sec - res //今天归零!!!
if (now_res >= -2209017600000 && now_res <= 2524579200000 ) {//满足输入条件
//定义处理秒速时间的方法
function getToday(date) {
var newdate_year = newdate.getFullYear()
var newdate_month = newdate.getMonth()+1
var newdate_day = newdate.getDate()
var newdate_hours = newdate.getHours()
var newdate_min = newdate.getMinutes()
var newdate_miao = newdate.getSeconds()
if (newdate_day<10) {
newdate_day = "0"+newdate_day.toString()
}
if (newdate_month<10) {
newdate_month = "0"+newdate_month.toString()
}
if (newdate_hours<10) {
newdate_hours = "0"+newdate_hours.toString()
}
if (newdate_min<10) {
newdate_min = "0"+newdate_min.toString()
}
if (newdate_miao<10) {
newdate_miao = "0"+newdate_miao.toString()
}
return `${newdate_year}-${newdate_month}-${newdate_day}\xa0${newdate_hours}:${newdate_min}:${newdate_miao}`
}
//判断输入时间是否在合理范围
//输入时间是否是周末
var newdate_week = newdate.getDay() //获取输入时间的星期
// 判断是否是星期六或星期天
if(newdate_week==0||newdate_week==6){
//是星期六或者星期天
//输出下一个周一11点
if(newdate_week==0){//星期天
var workdate = todayZero + oneDay + MonWork + Worktime1//统一设置为下个星期一11:00
newdate.setTime(workdate)
var restime = getToday(workdate)
console.log(restime);
}else{
var workdate = todayZero + oneDay*2 + MonWork + Worktime1//统一设置为下个星期一0:00
newdate.setTime(workdate)
var restime = getToday(workdate)
console.log(restime);
}
}else{
//不是周末
//判断是否是处在某个阈值中
if(res<=28800000){//在00到08之间 输出11点
var workdate = todayZero + MonWork + Worktime1
newdate.setTime(workdate)
var restime = getToday(workdate)
console.log(restime);
// else if (28800000<res<=43200000)
}else if (res<=43200000 && 28800000<res){//开始工作时间 8:00到12:00 没在休息
var workdate = now_res + Worktime1//加三小时看看在不在休息
if(workdate<=43200000){//工作完成时间在工作时间内 直接输出
newdate.setTime(workdate)
var restime = getToday(workdate)
console.log("8:00到12:00 干完了");
console.log(restime);
}else if (workdate>43200000){//还没干完,下个工作时段接着干 加个12点的休息时间
var workdate = workdate + TwoWork
newdate.setTime(workdate)
var restime = getToday(workdate)
console.log(restime);
console.log("8:00到12:00没干完");
}
}else if(43200000<res && res<=50400000){//12-14休息时间开工,直接输出17点
var workdate = todayZero +(17*60*60*1000)
newdate.setTime(workdate)
var restime = getToday(workdate)
console.log(restime);
console.log("12-14休息时间开工,直接输出17点");
}else if(50400000<res && res<=64800000){//14-18工作时间开工
//先加三小时
var workdate = now_res + Worktime1
if(workdate>50400000 && workdate<64800000){//工作时间内完成 直接输出
newdate.setTime(workdate)
var restime = getToday(workdate)
console.log("14:00到18:00 干完了");
console.log(restime);
}else if (workdate>64800000){//工作时间内没有完成
var workdate = workdate + ThrWork + MonWork
newdate.setTime(workdate)
var restime = getToday(workdate)
console.log(restime);
console.log("14:00到18:00 没干完");
}
}else if (res>64800000){//18-00到第二天08休息时间 直接输出第二天11点
var workdate = todayZero + oneDay + MonWork + Worktime1
newdate.setTime(workdate)
var restime = getToday(workdate)
console.log(restime);
console.log("18-00到第二天08休息时间 直接输出第二天11点");
}
}
$(".res").val(restime)
}//满足输入条件的if
else{
$(".res").val("输入时间不在范围内")
}
})//点击事件
</script>
</body>
</html>
本文地址:https://blog.csdn.net/MixMund/article/details/110920035