Я получаю объекты даты/времени из пользовательского ввода и хотел бы проанализировать их на объект Date javascript. Дата находится в формате: 02/06/2018 00:59:03
что означает второе июня, 2018; Великобритания. Хотя это кажется чрезвычайно тривиальным и очень широко используемым сценарием, я не могу найти ничего в документации, как указать язык, который я хочу использовать для синтаксического анализа.
То, что делает синтаксический анализатор, просто предполагает, что я использую формат локали в США, который по умолчанию имеет первый месяц, затем день, а затем год, поэтому он смешивается месяц и день.
В настоящее время единственный доступный параметр, который я вижу, - это написать собственный парсер, который является прекрасным иш (это, конечно, не так, как мне может понадобиться в будущем), но мне кажется, что мне немного меньше 1980-х.
Возможно, я пропустил что-то в документации. Но есть ли у кого-нибудь другое решение? Было бы очень благодарно.
Ps Я с трудом могу представить, что это еще не спрошено, но мой поиск тоже не проявился.
Примечание: разбор строк даты с помощью конструктора Date (и Date.parse, они эквивалентны) сильно не рекомендуется из-за различий браузера и несоответствий. Поддержка строк формата RFC 2822 осуществляется только по соглашению. Поддержка форматов ISO 8601 отличается тем, что только строки с датой (например, "1970-01-01") обрабатываются как UTC, а не локально.
Если ваш ввод структурирован и формат постоянный, написание собственного анализатора должно быть простым. Здесь используется подход с использованием регулярного выражения.
var dateString = '02/06/2018 00:59:03';
var dateParser = /(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}):(\d{2})/;
var match = dateString.match(dateParser);
var date = new Date(
match[3], // year
match[2]-1, // monthIndex
match[1], // day
match[4], // hours
match[5], // minutes
match[6] //seconds
);
console.log('Input: ' + dateString);
console.log('Output (en-US): ' + date.toLocaleString('en-US'));
console.log('Output (en-GB): ' + date.toLocaleString('en-GB'));
Альтернативно, разделение строк было бы довольно легко (т.е. Разделить на пробел, а затем разбить первый результат на /
и второй результат на :
.