#locale #dayjs
#locale #dayjs
Вопрос:
Я экспериментирую dayjs
. Следуя примеру в документации, я установил это в своем HTML-скрипте:
<script src="https://unpkg.com/dayjs@1.10.4/dayjs.min.js"></script>
<script src="https://unpkg.com/dayjs@1.10.4/locale/en-gb.js"></script>
В моем JS-коде у меня есть строки:
var locale = dayjs.locale('en-gb');
var date = dayjs('1/4/21').format('DD MMM YYYY');
Первая строка правильно возвращает locale
значение ‘en-gb’. Однако вторая строка возвращается date
как «04 января 2021 года», когда она должна быть «01 апреля 2021 года», в соответствии со стандартным британским английским порядком дат DMY.
Я проверил, что в файле локали en-gb указана правильная дата.
Как мне исправить эту проблему?
Редактировать
С тех пор я обнаружил, что moment
при использовании возникает та же проблема moment-with-locales.js
.
Ответ №1:
Это может не отвечать на вопрос, поскольку вы конкретно спрашивали, как анализировать даты, используя локальную функцию. Но я обошел это, используя пользовательский плагин синтаксического анализа:
const customParseFormat = require("dayjs/plugin/customParseFormat");
dayjs.extend(customParseFormat);
dayjs("01/04/2021", "DD/MM/YYYY").format("DD MMM YYYY")
Ответ №2:
Как упоминалось в OP, эта функциональность не поддерживается dayjs
or momentjs
на момент написания этого вопроса.
Вот решение проблемы ES6:
// Create this utility function
function formatLocale(dateStr: string) {
const values = dateStr.split('/');
// Make sure string is valid
const isValid = values.length === 3 amp;amp; values.every(val => val.length > 0);
if (!isValid) return dateStr; // don't change if date isn't valid (handle error however you want)
if (dayjs.locale() === 'en-gb')
return `${values[1]}/${values[0]}/${values[2]}`;
// otherwise
return dateStr;
}
// Usage
dayjs(formatLocale('1/4/2022')).format('DD MMM YYYY') // "01 April 2022"
Создайте служебную функцию formatLocale
, которую можно использовать для проверки текущей локали dayjs
, если это "en-gb"
так, она будет соответствующим образом манипулировать строковым вводом, чтобы соответствовать ожидаемому dayjs
. Если локаль — это что-то другое или если ввод строки недопустим, он не будет манипулировать входной строкой.