为什么JavaScript的Date对象在Firefox中无效?

时间:2013-07-26 12:23:45

标签: javascript jquery date firefox jquery-plugins

我在一个看起来像“2013年4月30日”的div中约会,我想将其转换为:30周二 APR | 2013

我已经写了一些代码来为我做这个转换。它在Chrome中运行良好,但有些如何在Firefox和firebug控制台中无法工作:日期{Invalid Date}并显示输出看起来像NaN undefined undefined | NaN的。我的代码看起来低于或you can also see this Fiddle

(function ( $ ) {

    $.fn.bcDateModify = function() {
        return this.each(function() {
            var obj = this;
            var srcDate= $(obj).html();            
            srcDate = srcDate.replace(/\s+/g, '');

            objDate = new Date(srcDate);
             console.log(objDate);
            var newDate = objDate.getDate();
            var newDay = objDate.getDay();
            var newMonth = objDate.getMonth();
            var newYear = objDate.getFullYear();

            var weekday=new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
            var monthNames=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

            var myhtml ='<div class="date"><span>'+newDate+'</span></div><div class="month-day"><h3>'+weekday[newDay]+'</h3><span>'+monthNames[newMonth]+' | '+newYear+'</span></div>';
            $(obj).html(myhtml);
        });

    };

}( jQuery ));

$(document).ready(function(){
$('.date-obj').bcDateModify();
});

3 个答案:

答案 0 :(得分:9)

你无法按照自己的方式构建日期(至少在Firefox中你不能),例如传入字符串“22-Jul-2013”​​。

我改变了这一行

objDate = new Date(srcDate);

var dateSplit = srcDate.split("-");            
objDate = new Date(dateSplit[1] + " " + dateSplit[0] + ", " + dateSplit[2]);

确保正确构建日期。

请参阅更新的小提琴here

答案 1 :(得分:4)

关于在FF中使用连字符的日期的使用,我刚刚找到了这个item。似乎没有一个FF版本支持这种格式。

一种可能的替代方法是在构建日期之前用-替换

srcDate = srcDate.replace(/-/g, ' ');

此解决方案适用于跨浏览器,并已在Firefox v19,Chrome v24和Safari v5.1.7(在Windows上)进行测试。

Demo

答案 2 :(得分:1)

我知道这可能不是最好的答案,但我发现这些类型的东西在浏览器中非常棘手。这个小型图书馆为我节省了大量时间。

http://momentjs.com/

moment("30-Apr-2013", "DD-MMM-YYYY").format("DD dddd MMM | YYYY");

老实说,我觉得JavaScript应该像PHP或其他语言一样内置这些东西。