2

我正在制作一个网站,如果用户登录,则为用户提供一定的注销时间,其中定义了注销时间,剩余时间是从注销时间 - 服务器时间获得的。

我已经通过 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 天)并试图赶上最后期限,因此非常感谢您提供详尽的解释。

4

5 回答 5

2

是 '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' ??

http://jsfiddle.net/8XF3F/7/

于 2012-09-27T10:07:26.303 回答
1

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

于 2012-09-27T10:06:41.110 回答
1

我的猜测是 JavaScript 的Date对象不喜欢你传递给它的格式。来自 MDN:

该字符串应采用解析方法可识别的格式(符合 IETF 的 RFC 1123 时间戳)。

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

于 2012-09-27T10:07:19.153 回答
1

函数的格式Date()必须非常具体。

我在这里模拟了它:http: //jsfiddle.net/PtGxk/

如您所见,您的日期是“/”分隔的,您的时间是“:”分隔的,一切都很好。

于 2012-09-27T10:09:36.723 回答
0
document.getElementById("timeleft").value = parseInt(tlHours) + ":" + parseInt(tlMinutes) + ":" + parseInt(tlSeconds);
于 2012-09-27T10:08:21.777 回答