如何写好if来求工作时间

我想求取工作时间,
对于小于8点的时间,统一输出8点00,
对于时间是8:00-12:00,就输出输入的时间参数,
对于时间是12:01-14:30的,就输出12:00,
对于时间为14:31-17:30的,就输出输入的时间参数,
对于17:30以后的时间,就输出17:30.

我写了if语句,写得不好,请大家指教一下。谢谢。


function returnRealWorkTime(t_hour,t_min) {
    var correctHour=0,correctMin=0;
    if(t_hour < 8){correctHour = 8;correctMin= 0;}
    else if(8 <= parseInt(t_hour) < 12){correctHour = t_hour;correctMin= t_min;}
    else if(12<= parseInt(t_hour) < 14){correctHour = 12;correctMin= 0;}
    else if(parseInt(t_hour)=14 && parseInt(t_min) < 30){correctHour = 12;correctMin= 0;}
    else if(parseInt(t_hour)=14 && parseInt(t_min) >= 30 ){correctHour = t_hour;correctMin= t_min;}
    else if( 14<parseInt(t_hour)<=17 && parseInt(t_min) <= 30){correctHour = t_hour;correctMin= t_min;}
    else if(parseInt(t_hour)=17 && parseInt(t_min) > 30){correctHour = 17;correctMin= 30;}
    else {correctHour = 17;correctMin= 30;}
    return correctHour + ':' + correctMin;

}
var x6 = returnRealWorkTime(14,15);  //想输出12:00,但输出14:15
var x7 = returnRealWorkTime(12,39);   //想输出12:00,但输出12:39
var x8 = returnRealWorkTime(18,39);  //想输出17:30,但输出18:39
阅读 1.9k
2 个回答

首先,必须指出题主代码的错误:

  1. 类似 1 < a < 2 的条件判断是错误的,必须改为 1 < a && a < 2 的格式。
  2. 类似 a = 1 的条件判断也是错误的,必须改为 a == 1 的格式。

其次,按照题主的要求,判断一下当只有一位数字的时候,在前面增加一个字符 0

我没有对题主的代码作大的改动,只是简单的修复了 BUG,代码如下:

function returnRealWorkTime(t_hour, t_min) {
    var correctHour=0,correctMin=0;
    if(t_hour < 8){correctHour = 8;correctMin= 0;}
    else if(8 <= parseInt(t_hour) && parseInt(t_hour) < 12){correctHour = t_hour;correctMin= t_min;}
    else if(12 <= parseInt(t_hour) && parseInt(t_hour) < 14){correctHour = 12;correctMin= 0;}
    else if(parseInt(t_hour)==14 && parseInt(t_min) < 30){correctHour = 12;correctMin= 0;}
    else if(parseInt(t_hour)==14 && parseInt(t_min) >= 30 ){correctHour = t_hour;correctMin= t_min;}
    else if( 14<parseInt(t_hour)<=17 && parseInt(t_min) <= 30){correctHour = t_hour;correctMin= t_min;}
    else if(parseInt(t_hour)==17 && parseInt(t_min) > 30){correctHour = 17;correctMin= 30;}
    else {correctHour = 17;correctMin= 30;}

    if (correctHour < 10) correctHour = "0" + correctHour;
    if (correctMin < 10) correctMin = "0" + correctMin;

    return correctHour + ':' + correctMin;
}

题主可以再看一下我优化的结果:

function returnRealWorkTime(h, m) {
    // 把时间转化为一个数字,可以极大地方便计算。
    let n = h + m / 60;
    // 接下来只需要判断 n 的范围即可。
    if (n < 8) [h, m] = [8, 0];
    if (12 <= n && n < 14.5) [h, m] = [12, 0];
    if (n >= 17.5) [h, m] = [17, 30];
    // 最后输出的时候,还是要判断一下是否小于 10。
    return `${h < 10 ? `0${h}` : `${h}`}:${m < 10 ? `0${m}` : `${m}`}`;
}
const returnRealWorkTime = (h, m) => {
  const H = h < 10 ? `0${h}` : h
  const M = m < 10 ? `0${m}` : m
  if (H < 8) return '8:00'
  if (H < 12) return `${H}:${M}`
  if ((H < 15 && M < 30) || H < 14) return '12:00'
  if ((H < 18 && M < 30) || H < 17) return `${H}:${M}`
  return '17:30'
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题