2

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

我已经编写了一些代码来为我进行这种转换。它在 Chrome 中工作正常,但在 Firefox 和 firebug 控制台中无法正常工作,它说: Date {Invalid Date} 并显示输出看起来像 NaN undefined undefined | 南。我的代码如下所示,或者您也可以看到这个 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();
});
4

3 回答 3

10

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

我改变了这条线

objDate = new Date(srcDate);

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

以确保正确构建日期。

在此处查看更新的小提琴。

于 2013-07-26T12:39:15.363 回答
4

刚刚发现这个关于在 FF 中使用带连字符的日期的项目。似乎没有一个 FF 版本支持该格式。

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

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

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

演示

于 2013-07-26T12:50:03.510 回答
1

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

http://momentjs.com/

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

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

于 2013-07-26T12:40:20.080 回答