Javascript 显示用户在页面上的时间

Javascript 显示用户在页面上的时间,javascript,jquery,timer,Javascript,Jquery,Timer,我一直在努力向用户展示他们在某个页面上花了多长时间。我想我可能把它复杂化了。现在我给他们看分钟数,然后给他们看秒数。这几乎是有效的,除非它在2分5秒时,例如,它看起来是2:5而不是2:05。然后,一旦达到10秒,罚款:2:10 你知道我该如何修改代码来纠正这个错误吗?谢谢 var timer; var timerStart; var timeSpentOnSite = getTimeSpentOnSite(); function getTimeSpentOnSite(){ timeSp

我一直在努力向用户展示他们在某个页面上花了多长时间。我想我可能把它复杂化了。现在我给他们看分钟数,然后给他们看秒数。这几乎是有效的,除非它在2分5秒时,例如,它看起来是2:5而不是2:05。然后,一旦达到10秒,罚款:2:10

你知道我该如何修改代码来纠正这个错误吗?谢谢

var timer;
var timerStart;
var timeSpentOnSite = getTimeSpentOnSite();

function getTimeSpentOnSite(){
    timeSpentOnSite = parseInt(localStorage.getItem('timeSpentOnSite'));
    timeSpentOnSite = isNaN(timeSpentOnSite) ? 0 : timeSpentOnSite;
    return timeSpentOnSite;
}

function startCounting(){
    timerStart = Date.now();
    timer = setInterval(function(){
        timeSpentOnSite = getTimeSpentOnSite()+(Date.now()-timerStart);
        localStorage.setItem('timeSpentOnSite',timeSpentOnSite);
        timerStart = parseInt(Date.now());
        // Convert to seconds
        $("#timeSpentMin").html(parseInt(timeSpentOnSite/1000 / 60));
        $("#timeSpentSec").html(parseInt(timeSpentOnSite/1000 % 60));
    },1000);
}
startCounting();

只需对小于10的值进行简单的填充即可实现此目的。下面是这样的

function padValue(value) {
  if (value < 10) {
    return '0' + value;
  }
  return value;
}

您可以使用以下简单功能:

function padTime(time) {
  return ("0" + time).slice(-2);
}
在您想要的任何时间传递它,它将为您填充:

var最小值=5;
var-sec=2;
日志(“未添加:+min+:”+sec);
log(“填充秒:+min+:”+padTime(秒));
log(“填充的分钟和秒:“+padTime(min)++”:“+padTime(sec));
最小值=12;
秒=52;
日志(“未添加:+min+:”+sec);
log(“填充秒:+min+:”+padTime(秒));
log(“填充的分钟和秒:“+padTime(min)++”:“+padTime(sec));
功能padTime(时间){
返回(“0”+时间).slice(-2);

}
将您的功能更改为以下内容,使用
toString()
和callin
转换秒数和分钟数,检查秒数和分钟数部分的位数。长度参见下文

function startCounting() {
  timerStart = Date.now();
  timer = setInterval(function() {
    timeSpentOnSite = getTimeSpentOnSite() + (Date.now() - timerStart);
    localStorage.setItem('timeSpentOnSite', timeSpentOnSite);
    timerStart = parseInt(Date.now());

    // Convert to seconds
    let sec = parseInt(timeSpentOnSite / 1000 % 60);
    sec = sec.toString().length < 2 ? '0' + sec : sec;
    let min = parseInt(timeSpentOnSite / 1000 / 60);
    min = min.toString().length < 2 ? '0' + min : min;




    $("#timeSpentMin").html(min);
    $("#timeSpentSec").html(sec);
  }, 1000);
}
函数开始计算(){
timerStart=Date.now();
计时器=设置间隔(函数(){
TimePentOnsite=getTimeSpentOnSite()+(Date.now()-timerStart);
setItem('TimePentOnsite',TimePentOnsite);
timerStart=parseInt(Date.now());
//转换为秒
设sec=parseInt(timeSpentOnSite/1000%60);
秒=秒toString()。长度<2?'0'+秒:秒;
设min=parseInt(timespent/1000/60);
最小值=最小值toString()。长度<2?'0'+最小值:最小值;
$(“#timespuntmin”).html(min);
$(“#timeSpentSec”).html(秒);
}, 1000);
}

要在JavaScript中填充数字,可以使用内置的
padStart
方法。在给定整数参数的情况下,可以使用下面的函数返回格式化字符串(如果传入字符串,可以忽略
toString()
调用)


@ChrisG Hey Chris的可能重复项您能告诉我在这种情况下如何实现它吗?较旧的浏览器不支持
padStart()
函数。MS Edge支持它,但IE不支持它。模板文本(带回号的字符串)也支持它。
function startCounting() {
  timerStart = Date.now();
  timer = setInterval(function() {
    timeSpentOnSite = getTimeSpentOnSite() + (Date.now() - timerStart);
    localStorage.setItem('timeSpentOnSite', timeSpentOnSite);
    timerStart = parseInt(Date.now());

    // Convert to seconds
    let sec = parseInt(timeSpentOnSite / 1000 % 60);
    sec = sec.toString().length < 2 ? '0' + sec : sec;
    let min = parseInt(timeSpentOnSite / 1000 / 60);
    min = min.toString().length < 2 ? '0' + min : min;




    $("#timeSpentMin").html(min);
    $("#timeSpentSec").html(sec);
  }, 1000);
}
function formatTime(hour, minute) {
  return `${hour}:${minute.toString().padStart(2, '0')}`;
}