【问题标题】:TimeConvert JavaScript function on CoderbyteCoderbyte 上的 TimeConvert JavaScript 函数
【发布时间】:2016-03-06 15:54:18
【问题描述】:

我正在对 Coderbyte 进行挑战,如果对我的问题提出任何建议,我将不胜感激:

我知道有一种更简单的方法可以解决这个问题(我后来发现):

function TimeConvert(num) { 
  var hours = Math.floor(num / 60);  
  var minutes = num % 60;
  return hours + ":" + minutes; 
  } 

...所以 TimeConvert(123);将是 2:3

我知道我的答案比较复杂,但为什么我试图回答这个问题的方式不起作用?我错过了什么?对于输入的任何数字,它只会返回 0:00:

function TimeConvert(num) { 
    var hours=0;
    var minutes=0;

    for(var i=0; i<=num; i+=60) {//loop through number every 60
        if(num[i]>=60) { //for every 60 add 1 hour
            hours+=1;
        }else if(num[i]<60){
            minutes=num[i];
        }
    }

  var newMinute=0;
    if (minutes<10){
            newMinutes="0"+minutes;
        }else if(minutes>10){
            newMinutes=minutes;
        }

    return(hours + ":" + newMinutes);          
}

谢谢大家!^^

【问题讨论】:

  • 您的问题是您在不使用Date() 对象的情况下进行日期时间计算。你已经在 javascript 中有方法,但是你正在制作循环和所有疯狂的东西来实现存在的东西。你可以从这个开始:techrepublic.com/article/… 或者如果这对你来说非常复杂,你可以使用 Moment.js 库,它可以让日期时间变得更容易。 momentjs.com
  • @MarcosPérezGudem 我认为这不是问题所在。在下面检查我的答案。
  • @MarcosPérezGudem 我知道有更简单的方法可以解决这个问题,但我是 JavaScript 新手。我要弄清楚如何用我目前的想法创建一个解决方案。我相信从长远来看,这将对我作为一名开发人员有所帮助,并有助于练习我解决问题的能力。 :)
  • @MarcosPérezGudem *不想要

标签: javascript function


【解决方案1】:

你为什么要num[i]&gt;=60?您只需检查num&gt;=60num&lt;60num[i] 将始终是未定义的值,并且 num 不是字符串。 (如果它是一个字符串,它 num[i] 将打印与该索引对应的字符。)所以你需要比较 num 而不是 num[i]

    function TimeConvert(num) { 
    var hours=0;
    var minutes=0;
    var times = num;
    for(var i=0; i<times; i+=60) {//loop through number every 60
        if(num>=60) { //for every 60 add 1 hour
            hours+=1;
            num -= 60;
        }else if(num<60){
            minutes=num;
        }
    }

  var newMinute=0;
    if (minutes<10){
            newMinutes="0"+minutes;
        }else if(minutes>10){
            newMinutes=minutes;
        }

    return(hours + ":" + newMinutes);          
}

console.log(TimeConvert(123));

Updated Fiddle

【讨论】:

  • 感谢@void 解决了 num 问题。我对 num 和 num[i] 感到困惑,你为我澄清了一些我已经知道但还没有坚持的事情。但即使我应用了此更改,该功能仍然无法正常工作。我在下面找出了问题和两个解决方案。 ^^
  • @Masha 我认为该功能运行良好:jsfiddle.net/voidSO/L5g4fbcf.
  • 实际上,当您输入 123 时,它会给出 3:00。应该是 2:03
  • @Masha 哦,是的,检查更新的答案和更新的小提琴 :)
  • 是同一个链接,因为我得到了相同的答案吗?
【解决方案2】:

谢谢!我实际上想出了两种方法来解决这个问题。首先,我应该迭代 1,而不是 60,并且在第一个 if 语句中,我需要为每次迭代减去 60,如下所示:

function TimeConvert(num) { 
    var hours=0;
    var minutes=0;

    for(var i=0; i<=num; i++) {
        if(num>=60) { //for every 60 add 1 hour
            hours+=1;
            num-=60;//makes sure that the loop goes every 60
        }else if(num<60){
            minutes=num;
        }
    }

//Coderbyte 不需要,出于样式原因添加。第二个答案也一样

    var newMinute=0;
    if (minutes<10){
            newMinutes="0"+minutes;
    }else if(minutes>10){
            newMinutes=minutes;
    }

//写分钟不是newMinutes(对于Coderbyte)。第二个答案也一样。

  return(hours + ":" + newMinutes); 
  }

我想出了如何使用 while 循环来做到这一点:

function TimeConvert(num) { 
    var hours=0;
    var minutes=0;
    var newMinutes=0;

    while(num>=60) {
        hours+=1;
        num-=60;
    }

    if(num<60){
      minutes=num;
    }

    if (minutes<10){
      newMinutes="0"+minutes;
    }else if(minutes>10){
      newMinutes=minutes;
    }

    return(hours + ":" + newMinutes);          
}

【讨论】:

    【解决方案3】:

    除了 Math.floor() 之外,您还可以包含 ES6 Template Literals 以实现单行返回语句。

    function TimeConvert(num) { 
      return `${Math.floor(num/60)}:${num%60}`; 
    }
    

    【讨论】:

      猜你喜欢
      • 2016-03-10
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 2019-08-11
      • 1970-01-01
      相关资源
      最近更新 更多