Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript秒表-显示前导数字时出现问题_Javascript_Timer_Intervals_Stopwatch_Digits - Fatal编程技术网

JavaScript秒表-显示前导数字时出现问题

JavaScript秒表-显示前导数字时出现问题,javascript,timer,intervals,stopwatch,digits,Javascript,Timer,Intervals,Stopwatch,Digits,我一直在尝试使用JavaScript创建一个简单的秒表脚本,以显示经过的秒数、分钟数和小时数 理想情况下,我希望时间显示如下: hh:mm:ss 在JavaScript中,我无法找到一种内置的方式来格式化数字,如果一个数字只有一个数字的长度,那么这些数字就包含一个前导零。这就是我的问题所在-我添加到脚本中添加前导“0”的逻辑适用于seconds显示,但不适用于minutes或hours显示 我编写的代码将在setInterval()函数的每次迭代中添加一个“0”,创建一个长字符串“0”,然后是当

我一直在尝试使用JavaScript创建一个简单的秒表脚本,以显示经过的秒数、分钟数和小时数

理想情况下,我希望时间显示如下:

hh:mm:ss

在JavaScript中,我无法找到一种内置的方式来格式化数字,如果一个数字只有一个数字的长度,那么这些数字就包含一个前导零。这就是我的问题所在-我添加到脚本中添加前导“0”的逻辑适用于
seconds
显示,但不适用于
minutes
hours
显示

我编写的代码将在
setInterval()
函数的每次迭代中添加一个“0”,创建一个长字符串“0”,然后是当前
minutes
hours
值,而不是只添加前导的“0”和一位数字值

我很难理解为什么在
minutes
hours
部分会发生这种情况,但在所使用的代码相同的情况下,
seconds
部分不会发生这种情况

理论上,我知道我实际上只是在一个字符串中添加另一个“0”,然后在每次执行
setInterval()
函数时显示该字符串,但我似乎无法理解为什么在
seconds
部分中不会出现这种情况。同样有趣的是,直到计时器达到两秒,前导的“0”才开始添加

请参阅下面我为这个秒表脚本编写的代码。我当然非常感谢任何人能够提供的任何见解,以使这项工作如预期的那样进行

让秒数=0;
分钟=0;
设小时=0;
功能秒表(){
//秒表每“滴答”一次,递增秒数
秒++;
//检查是否需要增加分钟或小时(应分别每60秒或60分钟增加一次)
如果(秒/60==0){
秒=0;
分钟++;
如果(分钟/60==0){
分钟=0;
小时++;
}
}
//如果经过的秒数、分钟数或小时数小于10,请在数字前面添加0。
如果(秒<10){
秒=“0”+秒;
}
如果(分钟<10){
分钟=“0”+分钟;
}
如果(小时<10){
小时数=“0”+小时数;
}
//将结果打印到HTML中的“display”div
document.getElementById(“display”).innerHTML=hours+“:“+minutes+”:“+seconds;
}
//每1000毫秒运行一次stopWatch()函数
设置间隔(秒表,1000)
00:00:00
当执行“0”+分钟(以及秒和小时)时,这些变量会自动转换为字符串,由两个字符组成,一个零和其他字符

由于变量会执行每次迭代,因此下次在字符串开头添加另一个“0”字符时,依此类推

它不会发生在秒上的原因是,在循环开始时,当您执行秒++时,正在将秒转换回int。所以它变成一个字符串,然后是int,然后是字符串,等等

要查看此操作,请尝试以下代码段:

var test = 1;
console.log( typeof test );  //outputs "number"
test = "0" + test;
console.log( typeof test ); //outputs "string"
test++;
console.log( typeof test); //outputs number
我的建议是将计数装置与显示装置分开。查看分钟数是否小于10,如果是,请将outputMinutes设置为“0”+分钟。在几秒钟和几小时内做同样的事情。然后每次只需更改outputMinutes、outputSeconds和outputHours,而实际的分钟、秒和小时变量仍然是整数。

当执行“0”+分钟(以及秒和小时)时,这些变量会自动转换为字符串,由两个字符组成,一个零和其他一些字符

由于变量会执行每次迭代,因此下次在字符串开头添加另一个“0”字符时,依此类推

它不会发生在秒上的原因是,在循环开始时,当您执行秒++时,正在将秒转换回int。所以它变成一个字符串,然后是int,然后是字符串,等等

要查看此操作,请尝试以下代码段:

var test = 1;
console.log( typeof test );  //outputs "number"
test = "0" + test;
console.log( typeof test ); //outputs "string"
test++;
console.log( typeof test); //outputs number
我的建议是将计数装置与显示装置分开。查看分钟数是否小于10,如果是,请将outputMinutes设置为“0”+分钟。在几秒钟和几小时内做同样的事情。然后每次只需更改outputMinutes、outputSeconds和outputHours,而实际的分钟、秒和小时变量仍然是整数。

让秒数=0;
分钟=0;
设小时=0;
让秒_string=“0”;
让分钟数_string=“0”;
让小时数_string=“0”;
功能秒表(){
//秒表每“滴答”一次,递增秒数
秒++;
//检查是否需要增加分钟或小时(应分别每60秒或60分钟增加一次)
如果(秒/60==1){
秒=0;
分钟++;
如果(分钟/60==1){
分钟=0;
小时++;
}
}
//如果经过的秒数、分钟数或小时数小于10,请在数字前面添加0。
如果(秒<10){
seconds_string=“0”+seconds.toString();
}否则{
seconds_string=seconds.toString();
}
如果(分钟<10){
分钟数_string=“0”+分钟数.toString();
}否则{
minutes_string=minutes.toString();
}
如果(小时<10){
小时数_string=“0”+小时数.toString();
}否则{
hours_string=hours.toString();
}
//将结果打印到HTML中的“display”div
document.getElementById(“display”).innerHTML=hours\u string+“:“+minutes\u string+”:“+seconds\u string;
}
//每1000毫秒运行一次stopWatch()函数
设置间隔(秒表,1000)
00:00:00
让秒数=0;
分钟=0;
设小时=0;
让秒_string=“0”;
让分钟数_string=“0”;
让小时数_string=“0”;
功能秒表(){
//秒表每“滴答”一次,递增秒数
秒++;
//检查是否需要增加分钟或小时(应分别每60秒或60分钟增加一次)
如果(秒/60==1){
秒=0;
分钟++;
如果(分钟/60)===