Javascript Date Parse с определенной локалью - PullRequest
0 голосов
/ 10 июня 2018

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

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

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

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

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

1 Ответ

0 голосов
/ 10 июня 2018

Из документации 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'));

В качестве альтернативы, разделение строк также будет довольно простым (то есть деление на пробел, затем разделение первого результата на / и второго результата на :).

...