Анализ даты Javascript JSON в IE7/IE8 возвращает NaN
Автор вопроса: JosiahОтветов: 5
Я анализирую дату из ленты событий JSON, но дата показывает "NaN" в IE7/8:
// Variable from JSON feed (using JQuery's $.getJSON)
var start_time = '2012-06-24T17:00:00-07:00';
// How I'm currently extracting the Month & Day
var d = new Date(start_time);
var month = d.getMonth();
var day = d.getDate();
document.write(month+'/'+day);// "6/24" in most browsers, "Nan/Nan" in IE7/8
Что я делаю неправильно? Спасибо!
он не поддерживается в IE7/8. Используйте мс с эпохи или прокладку. Esailija 13.06.2012
Я очень рекомендую использовать DateJS здесь... Andrew Whitaker 13.06.2012
См. также: Какие браузеры поддерживают анализ строки даты ISO-8601 с помощью Date.parse? Myrne Stol 21.05.2013
var start_time = '2012-06-24T17:00:00-07:00';
var d = Date.fromISO(start_time);
var month = d.getMonth();
var day = d.getDate();
alert(++month+' '+day); // returns months from 1-12
Ответ 2 · рейтинг 25 · fbtb
Для ie7/8 я только что сделал:
var ds = yourdatestring;
ds = ds.replace(/-/g, '/');
ds = ds.replace('T', ' ');
ds = ds.replace(/(\+[0-9]{2})(\:)([0-9]{2}$)/, ' UTC\$1\$3');
date = new Date(ds);
Это заменяет все вхождения "-" на "/", маркер времени "T" на пробел и заменяет информацию о часовом поясе строкой, удобной для IE, которая позволяет IE7/8 правильно анализировать даты из строк. Решил все вопросы за меня.
Ответ 3 · рейтинг 5 · Estin Chin
См. сообщение RobG по адресу Результат toJSON ( ) в дату различается между IE8 и IE9+.
Ниже функция работала для меня в IE 8 и ниже.
// parse ISO format date like 2013-05-06T22:00:00.000Z
function convertDateFromISO(s) {
s = s.split(/\D/);
return new Date(Date.UTC(s[0], --s[1]||'', s[2]||'', s[3]||'', s[4]||'', s[5]||'', s[6]||''))
}
Вы можете протестировать, как показано ниже:
var currentTime = new Date(convertDateFromISO('2013-05-06T22:00:00.000Z')).getTime();
alert(currentTime);
@gib Спасибо за предложение по Moment.js. Эта небольшая библиотека действительно помогает при работе с датами и JavaScript.
Moment.js решил проблему, описанную в исходном вопросе, который у меня тоже был. IE8 отображал даты JSON ISO как NaN при анализе в новый объект Date().
Быстрое решение (включите moment.js на свою страницу или скопируйте код в свои функции js)
Если вам просто нужно отобразить на странице дату, загруженную из даты в формате JSON ISO, сделайте следующее:
order_date = moment(data.OrderDate); //create a "moment" variable, from the "data" object in your JSON function in Protoype or jQuery, etc.
$('#divOrderDate).html(order_date.calendar()); //use Moment's relative date function to display "today", "yesterday", etc.
or
order_date = moment(data.OrderDate); //create a "moment" variable, from the "data" object in your JSON function in Protoype or jQuery, etc.
$('#divOrderDate).html(order_date.format('m/d/YYYY')); //use Moment's format function to display "2/6/2015" or "10/19/2014", etc.
Если у вас должен быть объект Date() (например, для использования с компонентами jQuery), выполните следующие действия, чтобы успешно заполнить предоставленную JSON дату в формате ISO. (Это предполагает, что вы уже находитесь внутри функции обработки данных JSON.)
var ship_date = new Date(moment(data.ShipDate).format('m/d/YYYY')); //This will successfully parse the ISO date into JavaScript's Date() object working perfectly in FF, Chrome, and IE8.
//initialize your Calendar component with the "ship_date" variable, and you won't see NaN again.