Как установить локаль для разбора в moment.js? - PullRequest
0 голосов
/ 06 июня 2019

К сожалению, я не нашел ответа в документации, поэтому ...

Например, у меня есть дата ввода: "09/01/2017".Я не знаю, это ДД / ММ / ГГГГ или ММ / ДД / ГГГГ, но я знаю язык пользователя.Могу ли я получить что-то вроде ниже?

let date   = "09/01/2017",
    locale = "en_US",// or "en_AU"
    result = moment(date, locale).format("DD MMM YYYY");
// 01 Sep 2017
// 09 Jan 2017

Или мне нужно написать карту, а затем установить формат на момент?

let map =
    {
        en_US: 'DD/MM/YYYY',
        en_AU: 'MM/DD/YYYY',
        // ...
    },
    date   = "09/01/2017",
    locale = "en_US",// or "en_AU"
    result = moment(date, map[locale]).format("DD MMM YYYY");
// 01 Sep 2017
// 09 Jan 2017

Спасибо

Ответы [ 2 ]

3 голосов
/ 06 июня 2019

Вы можете использовать moment.localeData() и longDateFormat('L') для получения специфичных для локали токенов.

Вот живой пример:

let date   = "09/01/2017";
let locale = "en_US";
let localeFormat =  moment.localeData(locale).longDateFormat('L');
let result = moment(date, localeFormat).format("DD MMM YYYY");
console.log(result); // 01 Sep 2017

locale = "en_AU";
localeFormat =  moment.localeData(locale).longDateFormat('L');
result = moment(date, localeFormat).format("DD MMM YYYY");
console.log(result); // 09 Jan 2017
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.min.js"></script>
0 голосов
/ 06 июня 2019

Я бы использовал обычный JS, чтобы вытянуть месяц на основе локального, использовать момент для форматирования месяца в MMM, а затем просто присоединить их.

var locale = 'en_AU'

var date = '09/01/2019'.split('/')

if (locale === 'en_AU') {
    var monthFormatted = moment(date[0]).format('MMM')
    date = [date[1], monthFormatted, date[2]].join(' ')
}

else {
    var monthFormatted = moment(date[1]).format('MMM')
    date = [date[0], monthFormatted, date[2]].join(' ')
}

console.log(date)
// 09 Jan 2019 or 01 Sep 2019
...