Парсинг даты в JavaScript отличается между сафари и хромом

У меня есть следующий код

var c = new Date(Date.parse("2011-06-21T14:27:28.593Z"));
console.log(c);

На Chrome это правильно распечатывает дату на консоли. В Safari это перестало работать. Кто корректен и что еще более важно что лучший способ состоит в том, чтобы обработать это?

58
задан 21 June 2011 в 18:44

1 ответ

Вот более устойчивый синтаксический анализатор ISO 8601, чем, что отправили другие. Это не обрабатывает недельный формат, но это должно последовательно обрабатывать все другие допустимые даты ISO 8601 через все браузеры.

function newDate(value) {
  var field = value.match(/^([+-]?\d{4}(?!\d\d\b))(?:-?(?:(0[1-9]|1[0-2])(?:-?([12]\d|0[1-9]|3[01]))?)(?:[T\s](?:(?:([01]\d|2[0-3])(?::?([0-5]\d))?|24\:?00)([.,]\d+(?!:))?)?(?::?([0-5]\d)(?:[.,](\d+))?)?([zZ]|([+-](?:[01]\d|2[0-3])):?([0-5]\d)?)?)?)?$/) || [];
  var result = new Date(field[1], field[2] - 1 | 0, field[3] || 1, field[4] | 0, field[5] | 0, field[7] | 0, field[8] | 0)
  if (field[9]) {
    result.setUTCMinutes(result.getUTCMinutes() - result.getTimezoneOffset() - ((field[10] * 60 + +field[11]) || 0));
  }
  return result;
}

console.log(newDate('2011-06-21T14:27:28.593Z'));
console.log(newDate('1970-12-31T06:00Z'));
console.log(newDate('1970-12-31T06:00-1200'));
0
ответ дан 1 November 2019 в 13:31

Другие вопросы по тегам:

Похожие вопросы: