Safari Дата Javascript() NaN Issue (yyyy-MM-dd HH: mm: ss)
Мой код работает правильно в Google Chrome, но не в Safari.
Я понял, что мне нужно преобразовать yyyy-MM-dd HH:mm:ss
в ISO 8601
, но я не нашел решения для этого.
Онлайн-тестовая ссылка: http://jsfiddle.net/UVgHR/
JavaScript:
$(document).ready(function() {
calculateMinutes();
setInterval(calculateMinutes, 60000);
});
function calculateMinutes() {
$('.calculateMinutes').each(function () {
var diff = Math.abs(new Date( $(this).data('timestamp') ) - new Date());
var minutes = Math.floor((diff/1000)/60);
$(this).html( minutes + ' min.' );
});
}
Пример HTML:
<span class="calculateMinutes" data-timestamp="2014-02-18 15:00:48">
Ответы
Ответ 1
Чтобы облегчить вашу проблему, выполните следующие действия:
new Date('2014-02-18 15:00:48')
Эта работа в хром, но не в сафари. В mdn говорится о поддержке формата ECMAScript 5 ISO-8601:
В качестве альтернативы строка даты/времени может быть в формате ISO 8601. Для Например, "2011-10-10" (только дата) или "2011-10-10T14: 48: 00" (дата и время) может быть передано и проанализировано.
Если вы включили T
, он работает:
new Date('2014-02-18T15:00:48')
Вы можете использовать new Date('2014-02-18T15:00:48'.replace(/\s/, 'T'))
.
Если вы справитесь со многими подобными случаями, я рекомендую использовать moment, который, похоже, очень хорошо справляется с этим случаем с T или без него: синтаксический анализ из строки. Кроме того, весь ваш пример проще с помощью momentjs:
var minutes = moment().diff("2014-02-18 15:00:48", 'minutes');
Ответ 2
Я видел такую проблему раньше, и что для меня работает, - это заменить пространство между датой и временем на T
. Попробуйте следующее:
Обновлен JavaScript:
function calculateMinutes() {
$('.calculateMinutes').each(function () {
var timestamp = $(this).data('timestamp').replace(' ', 'T');
var diff = Math.abs(new Date(timestamp) - new Date());
var minutes = Math.floor((diff / 1000) / 60);
$(this).html(minutes + ' min.');
});
}
JSFiddle здесь.
Ответ 3
Я думаю, что Хосе пропустил один пункт здесь. Не забудьте включить Z, иначе будет временной интервал.
новая дата ('2014-02-18T15: 00: 48')
новая дата ('2014-02-18T15: 00: 48Z')
Вы можете использовать new Date('2014-02-18T15:00:48'.replace(/\s/, 'T')+'Z').
Обратитесь к этому за дополнительной информацией - новая дата() работает по-разному в Chrome и Firefox