Javascript Date Parse с определенной локалью

1

Я получаю объекты даты/времени из пользовательского ввода и хотел бы проанализировать их на объект Date javascript. Дата находится в формате: 02/06/2018 00:59:03 что означает второе июня, 2018; Великобритания. Хотя это кажется чрезвычайно тривиальным и очень широко используемым сценарием, я не могу найти ничего в документации, как указать язык, который я хочу использовать для синтаксического анализа.

То, что делает синтаксический анализатор, просто предполагает, что я использую формат локали в США, который по умолчанию имеет первый месяц, затем день, а затем год, поэтому он смешивается месяц и день.

В настоящее время единственный доступный параметр, который я вижу, - это написать собственный парсер, который является прекрасным иш (это, конечно, не так, как мне может понадобиться в будущем), но мне кажется, что мне немного меньше 1980-х.

Возможно, я пропустил что-то в документации. Но есть ли у кого-нибудь другое решение? Было бы очень благодарно.

Ps Я с трудом могу представить, что это еще не спрошено, но мой поиск тоже не проявился.

Теги:
datetime
locale

1 ответ

3
Лучший ответ

Из документации Date():

Примечание: разбор строк даты с помощью конструктора 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'));

Альтернативно, разделение строк было бы довольно легко (т.е. Разделить на пробел, а затем разбить первый результат на / и второй результат на :.

  • 0
    Спасибо @chuckx за точный ответ (хотя не то, на что я надеялся); плюс парсер включен. Я бы подумал, что в наши дни, с таким продвинутым javascript, можно ожидать, что у нас будут функции обратного вызова и для таких вещей, как toLocaleString ().
  • 0
    Мой ответ применим, когда вы придерживаетесь ванильного JS. Однако, как упомянул @Andreas, momentjs - это библиотека, которая решает ваши проблемы. В частности, смотрите функциональность синтаксического анализа, где вы можете указать формат ввода .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню