Как распарсить даты, представленные в нескольких форматах? (JS)
Предположим, есть строки с датами в нескольких форматах:
{
date01: "2020-01-01T10:10:10.745Z",
date02: "2020-01-01",
date03: "11-05-2019 16:00 часов, www.co.uk;",
date04: "2017-01-01 года в 18:00 (local time).",
date05: '"02" jan. 2014'"
}
Необходимо реализовать логику модуля, который бы приводил даты к стандарту ISO 8601:
2020-01-01T10:10:10.745Z => 2020-01-01T10:10:10.745+06:00
2020-01-01 => 2020-01-01T00:00:00.000Z
11-05-2019 16:00 часов, www.co.uk; => 2019-05-11T16:00:00.000Z
2017-01-01 года в 18:00 (local time). => 2017-01-01T18:00:00.000Z
"02" jan. 2014 => 2014-01-02T00:00:00.000Z
Как можно наиболее оптимально сделать это? Я придумала только вытаскивать нужные данные (день/месяц/год/время) регулярками, а потом переводить их в ISO 8601.
- Есть ли способ лучше и проще регулярок?
- Как лучше переводить в ISO 8601? Методом toISOString()?
Ответы (2 шт):
Если есть возможность использовать сторонние библиотеки, то moment.js позволяет делать такой парсинг
"2017-01-01 года в 18:00 (local time)." - в данном случае без обработки строки, скорее всего, не обойтись, к сожалению
Воспользуйтесь moment.js. С вашими данными у меня не заработал только 11-05-2019 16:00 часов, www.co.uk;. Т.е. есть варианты, когда вам придется писать паттерн для парсинга. Остальные, вроде, работают корректно. В формат впишите нужный вам паттерн.
var aa = moment("2010-01-01T05:06:07").format();
var bb = moment("2020-01-01T10:10:10.745Z").format();
var cc = moment("2020-01-01").format();
// Этот не работает
var dd = moment("11-05-2019 16:00 часов, www.co.uk;").format();
var ee = moment("2017-01-01 года в 18:00 (local time).").format();
var ff = moment('"02" jan. 2014').format();
alert(aa);
alert(bb);
alert(cc);
alert(dd);
alert(ee);
alert(ff);