首页 > 代码库 > js new Date('yyyy-MM-dd HH:mm:ss').getTime() 在IE、FF下为NaN的解决办法

js new Date('yyyy-MM-dd HH:mm:ss').getTime() 在IE、FF下为NaN的解决办法

  今天在一个项目中要做一个倒计时的效果,自己js水平很一般,在网上找了段倒计时代码用了(如下):

function CountDown(jqueryObj) {            var day_elem = jqueryObj.find(‘.day‘);            var hour_elem = jqueryObj.find(‘.hour‘);            var minute_elem = jqueryObj.find(‘.minute‘);            var second_elem = jqueryObj.find(‘.second‘);            var time = jqueryObj.data("endtime");var end_time = new Date(time).getTime(),//月份是实际月份-1            sys_second = (end_time - new Date().getTime()) / 1000;            var timer = setInterval(function () {                if (sys_second > 1) {                    sys_second -= 1;                    var day = Math.floor((sys_second / 3600) / 24);                    var hour = Math.floor((sys_second / 3600) % 24);                    var minute = Math.floor((sys_second / 60) % 60);                    var second = Math.floor(sys_second % 60);                    day_elem && $(day_elem).text(day);//计算天                    $(hour_elem).text(hour < 10 ? "0" + hour : hour);//计算小时                    $(minute_elem).text(minute < 10 ? "0" + minute : minute);//计算分钟                    $(second_elem).text(second < 10 ? "0" + second : second);//计算秒杀                } else {                    var a_play = jqueryObj.find(‘.p_ljw a:first‘);                    if (time.length > 0)                        a_play.attr(‘href‘, ‘javascript:void(0)‘).addClass(‘a_not‘).text(‘已结束‘);                    clearInterval(timer);                }            }, 1000);        }

  因为本人一直以chrome为主浏览器使用,开发测试的时候看到的也是正常的,也没有想到浏览器兼容性的问题,待这个模块上线内测的时候发现了一个问题,var end_time = new Date(time).getTime();这行代码在firefox、ie下运行后 end_time 的值为 NaN,其中 time 的格式为"yyyy-MM-dd HH:mm:ss",google之后做了如下修改,运行正常,我称为解决方案一吧

  解决方案一

function CountDown(jqueryObj) {            var day_elem = jqueryObj.find(‘.day‘);            var hour_elem = jqueryObj.find(‘.hour‘);            var minute_elem = jqueryObj.find(‘.minute‘);            var second_elem = jqueryObj.find(‘.second‘);            var time = jqueryObj.data("endtime");
       //修改-----------
var datetimeArray = time.split(‘ ‘); var dateArray = datetimeArray[0].split(‘-‘); var timeArray = datetimeArray[1].split(‘:‘); var end_time = new Date(dateArray[0],(dateArray[1]-1),dateArray[2],timeArray[0],timeArray[1],timeArray[2]).getTime(),//月份是实际月份-1
       //修改-----------
sys_second = (end_time - new Date().getTime()) / 1000; var timer = setInterval(function () { if (sys_second > 1) { sys_second -= 1; var day = Math.floor((sys_second / 3600) / 24); var hour = Math.floor((sys_second / 3600) % 24); var minute = Math.floor((sys_second / 60) % 60); var second = Math.floor(sys_second % 60); day_elem && $(day_elem).text(day);//计算天 $(hour_elem).text(hour < 10 ? "0" + hour : hour);//计算小时 $(minute_elem).text(minute < 10 ? "0" + minute : minute);//计算分钟 $(second_elem).text(second < 10 ? "0" + second : second);//计算秒杀 } else { var a_play = jqueryObj.find(‘.p_ljw a:first‘); if (time.length > 0) a_play.attr(‘href‘, ‘javascript:void(0)‘).addClass(‘a_not‘).text(‘已结束‘); clearInterval(timer); } }, 1000); }

 

  解决方案二

  方案二就是改变日期的格式,将  time  的格式由 "yyyy-MM-dd HH:mm:ss" 改为  "yyyy/MM/dd HH:mm:ss"

js new Date('yyyy-MM-dd HH:mm:ss').getTime() 在IE、FF下为NaN的解决办法