У меня есть следующий код
var c = new Date(Date.parse("2011-06-21T14:27:28.593Z"));
console.log(c);
На Chrome это правильно распечатывает дату на консоли. В Safari это перестало работать. Кто корректен и что еще более важно что лучший способ состоит в том, чтобы обработать это?
Вот более устойчивый синтаксический анализатор 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'));