我在一个看起来像“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();
});
答案 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上)进行测试。
答案 2 :(得分:1)
我知道这可能不是最好的答案,但我发现这些类型的东西在浏览器中非常棘手。这个小型图书馆为我节省了大量时间。
moment("30-Apr-2013", "DD-MMM-YYYY").format("DD dddd MMM | YYYY");
老实说,我觉得JavaScript应该像PHP或其他语言一样内置这些东西。