如何在Mozilla Firefox和IE中解决NaN:NaN:NaN错误

时间:2018-06-14 04:55:45

标签: javascript

我的网页倒计时了;它除了Mozilla和IE之外的所有浏览器都能正常工作。

我做错了什么,如何解决?

以下是我的代码:

***var dt = '2018-06-14 11:59 AM';
var ids= 'Demo1';***

function getTimes(dt, ids) {
    var countDownDate = new Date(dt).getTime();
    var x = setInterval(function() {
        var now = new Date().getTime();
        var distance = countDownDate - now;

        var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
        var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
        var seconds = Math.floor((distance % (1000 * 60)) / 1000);

        var op = hours+":"+minutes+":"+seconds;
        document.getElementById(ids).innerHTML = op;

        if (distance < 0) {
            clearInterval(x);
            document.getElementById(ids).innerHTML = "00:00:00";
            $('a#'+ids).removeClass('a').addClass('aa');
        }
    }, 1000);
}

这里是错误的屏幕截图;

NaN:NaN:NaN error screenshot

4 个答案:

答案 0 :(得分:1)

请将日期格式2018-06-14更改为2018/06/14

答案 1 :(得分:1)

在IE中出现解析错误:

var dt = '2018-06-14 11:59 AM';
var countDownDate = new Date(dt).getTime();
// is not valid date

因此您必须更改dt的日期字符串格式。

var dt = '2018/06/14 11:59 AM';
var countDownDate = new Date(dt).getTime();
// work fine in IE

答案 2 :(得分:0)

您接受的dt值不是数字,导致所有这些计算都导致NaN。 如果您展示如何将值dt参数传递给函数,我们可以提供更多信息。

答案 3 :(得分:0)

这里的问题是某些浏览器(chrome)会接受'2018-06-14 11:59 AM'作为new Date()的有效日期字符串。其他浏览器(firefox)没有。如果日期字符串应该接受已在其他地方预先验证过的日期对象,或者它应该处理您的特定日期字符串格式,就好像它没有效一样,那么您的函数就是将日期字符串信任为有效。

以下是一个示例修复:

const dateParts = dt.split(' ')           // ['2018-06-14', '11:59', 'AM']
const timeParts = dateParts[1].split(':') // ['11', '59']
const day = dateParts[0]                  // '2018-06-14'
const hours = parseInt(timeParts[0])      // 11
const minutes = parseInt(timeParts[1])    // 59

var countDownDate = new Date(day)
countDownDate.setHours(hours)
countDownDate.setMinutes(minutes)

编辑:更改源日期格式更容易,此解决方案假设您不能。