2013-07-26 3 views
2

У меня есть дата в div, которая выглядит как «30-Apr-2013», и я хочу конвертировать ее в: 30 вторник APR | 2013Почему JavaScript-объект Date недействителен в Firefox?

Я написал код, чтобы сделать это преобразование для меня. Он отлично работает в Chrome, но некоторые из них не работают в Firefox и в консоли firebug: «Дата {Неверная дата] и показывает вывод выглядит как 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

в Firebug консоли он говорит: Дата {Invalid Date}. и показывает вывод выглядит как NaN undefined undefined | NaN – Imran

+0

Добавьте 'console.log (srcDate);' before 'objDate = new Date (srcDate);' и напишите, что он сделал log –

+0

@KamilT это показывает: 21-Jul-2013, кстати, вы можете видеть это в jsfiddle У меня есть предоставлена. – Imran

ответ

9

Вы не можете построить дату так, как вы (по крайней мере, в Firefox, вы не можете), например, проходящей в строке «22-июл-2013».

Я изменил эту линию

objDate = new Date(srcDate); 

в

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

для обеспечения дата была построена правильно.

Просмотреть обновленную скрипку here.

1

Я знаю, что это скорее всего не лучший ответ, но я нашел эти типы вещей действительно сложным кросс-браузером. Эта небольшая библиотека спасла мне массу времени.

http://momentjs.com/

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

Честно говоря, я чувствую, как JavaScript должен иметь этот материал, построенный в PHP, как и на других языках.

4

Только что нашел item относительно использования дат с дефисами в FF. Похоже, ни одна из версий FF не поддерживает этот формат.

Один из возможных альтернатив заключается в том, чтобы заменить - на до даты постройки.

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

Это решение работает кросс-браузер и был протестирован в Firefox v19, v24 Chrome и Safari v5.1.7 (на Windows).

Demo

+1

Плохие разработчики firefox :( – sMaN

Смежные вопросы