Javascript 不,不,不,不

Javascript 不,不,不,不,javascript,date,countdowntimer,Javascript,Date,Countdowntimer,我正在制作一个网站,如果一个用户登录,该用户将有一个特定的注销时间,其中注销时间是定义的,时间限制是从注销时间-服务器时间获得的 我已经通过PHP获得了注销时间和服务器时间,但我希望动态显示剩余时间,因此需要Javascript。我已尝试使用以下代码: function timerStart(arg1, arg2){ var counter = setInterval(function() {getTimeLeft(arg1,arg2); }, 1000); } function ge

我正在制作一个网站,如果一个用户登录,该用户将有一个特定的注销时间,其中注销时间是定义的,时间限制是从注销时间-服务器时间获得的

我已经通过PHP获得了注销时间和服务器时间,但我希望动态显示剩余时间,因此需要Javascript。我已尝试使用以下代码:

function timerStart(arg1, arg2){
    var counter = setInterval(function() {getTimeLeft(arg1,arg2); }, 1000);
}

function getTimeLeft(arg_endtime, arg_currenttime){
    var endtime = new Date(arg_endtime);
    var curtime = new Date(arg_currenttime);

    var timeleft = new Date(endtime - curtime); //endtime - curtime;

    tlHours = timeleft.getHours();
    tlMinutes = timeleft.getMinutes();
    tlSeconds = timeleft.getSeconds();

    document.getElementById("timeleft").value = tlHours + ":" + tlMinutes + ":" + tlSeconds;

}

其中,arg1的值是“2011:10:11 17.30.00”,arg2的值是“2011:10:11 15:55:31”,作为字符串(是的,它们的格式不同)。但当我尝试上述代码时,我得到了NaN:NaN:NaN。我对Javascript非常陌生(3天),并试图赶上最后期限,因此非常感谢您的详细解释。

NaN在Javascript中的意思是“不是一个数字”,因此您很可能有一个计算结果不是数字(因为Javascript通常不会向您抛出错误,而是继续进行)。您应该通过断点或console.log来尝试找出endTime和curTime的实际值。

我猜JavaScript的
日期对象不喜欢您传递给它的格式。来自MDN:

字符串的格式应为解析方法识别的格式 (符合IETF的RFC1123时间戳)


但是,构造函数被重载以接受许多不同的提供日期的方法。如果我这样做的话,我会使用UNIX时间,乘以1000以毫秒为单位,这很容易从PHP中获得,而且在PHP和JavaScript中,在对其进行算术运算时更直观。

是“2011:10:11 17.30.00”,arg2的值是“2011:10:11 15:55:31”

是“2011/10/11 17:30:00”,arg2的值是“2011/10/11 15:55:31”


日期()函数的格式必须非常具体

我在这里模拟了一下:


正如您所看到的,您的日期是“/”-分开的,时间是“:”-分开的,一切正常。

您如何调用
timerStart
?我通过身体部位的onLoad调用了。James Wisemen's似乎解决了我的问题,但我刚刚意识到我的代码不是动态的,哦,好吧..谢谢,伙计,似乎它可以解决我的问题,只需要在结束时做一些字符串操作----
document.getElementById("timeleft").value = parseInt(tlHours) + ":" + parseInt(tlMinutes) + ":" + parseInt(tlSeconds);