对chrome和Firefox使用相同的代码,但得到不同的结果

Using same code for chrome and firefox but get different results

本文关键字:结果 代码 chrome Firefox      更新时间:2023-09-26

我有一个简单的倒计时脚本。该代码适用于chrome,但不适用于火狐浏览器。在火狐中,它显示 NaN,但 chrome 显示倒计时 为什么会发生这种情况的任何想法?

function CountDownTimer(time, name) {
  var counter = setInterval(function(){
    var today = new Date();
    var expire = new Date(time);
    var timeRemains = expire - today;
    var days  = Math.floor(timeRemains / (1000 * 60 * 60 * 24));
    var hours = Math.floor(timeRemains / (1000 * 60 * 60));
    var mins  = Math.floor(timeRemains / (1000 * 60));
    var secs  = Math.floor(timeRemains / 1000);
    var dd = days;
    var hh = hours - days  * 24;
    var mm = mins  - hours * 60;
    var ss = secs  - mins  * 60;
    if (expire < today) {
      clearInterval(counter);
      document.getElementById(name).innerHTML = '<span class="expire">expire!</span>';
      return;
    } else {
         if (dd < 10) {
             dd = "0" + dd;
         }
         if (hh < 10) {
             hh = "0" + hh;
         }
         if (mm < 10) {
             mm = "0" + mm;
         }
         if (ss < 10) {
             ss = "0" + ss;
         }
         document.getElementById(name).innerHTML = dd + ' : ' + hh + ' : ' + mm + ' : ' + ss;
    }
  }, 1000 );
}

CountDownTimer("2012-07-06 19:00:00", "Time1");​

Date() 函数似乎不能在所有浏览器中都能很好地工作。尝试在其上使用 setUTC 函数,如下所示:

today.setUTCFullYear(2012);
today.setUTCHours(19, 0, 0, 0);

更新:Date() 构造函数在所有浏览器上都很好,只是在使用"不当"字符串时就不行了。试试这个:

var today = new Date(2012,6,7,19,0,0)
更改如下所示

的日期格式:

CountDownTimer("June 7, 2012 19:00:00", "Time1");​

问题出在新的 Date() 格式上,该格式在浏览器中不一致。

JavaScript 中不同浏览器的日期格式问题。

您可以通过将 - 字符转换为/来使其工作。 Cameron的回答应该提供良好的跨浏览器行为,否则考虑使用第三方库,如moment.js

https://stackoverflow.com/questions/802861/javascript-date-manipulation-library

NaN代表

不是一个数字。

如果Leo的建议没有帮助,那么可能值得在组合中添加一些零星的console.log(),以找出问题所在。