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

时间:2014-10-23 14:22:50   收藏:0   阅读:4368

  今天在一个项目中要做一个倒计时的效果,自己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"

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!