К сожалению, языковой стандарт текущего пользователя не очень хорошо доступен в API, доступном для JavaScript. Этот ответ входит в некоторые из них, но даже здесь, в 2019 году, Chrome не поддерживает ни одно из перечисленных здесь свойств, кроме navigator.language
, что не является надежным (мое возвращается как en-US
, но я нахожусь в Великобритании, поэтому должно быть en-GB
[все в моей системе форматирует мои даты в британском формате]).
Единственный способ найти местный формат даты - этокак Intl.DateTimeFormat
, чтобы отформатировать дату и затем обработать ее из результата:
const format = new Intl.DateTimeFormat()
.format(new Date(2019, 11, 25)) // Christmas 2019
.replace("2019", "YYYY")
.replace("12", "MM")
.replace("25", "DD");
console.log(format);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
В моей системе это возвращает DD/MM/YYYY
, потому что я нахожусь в Великобритании, которая, как и NZ, использует рациональный формат.(Я частично американец, так что я могу шутить американцам по поводу их странного формата даты.) Предположительно в США он вернет MM/DD/YYYY
.
Затем вы можете использовать этот формат с moment
:
const format = new Intl.DateTimeFormat()
.format(new Date(2019, 11, 25)) // Christmas 2019
.replace("2019", "YYYY")
.replace("12", "MM")
.replace("25", "DD");
document.getElementById("btn").addEventListener("click", function() {
const str = document.getElementById("date").value.trim();
const dt = moment.utc(str, format);
console.log(`The date in ISO format: ${dt.toISOString()}`);
});
Enter a date in your local format and click Parse It:
<input type="text" id="date" autofocus>
<input type="button" id="btn" value="Parse It">
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
Возможно, вы захотите предложить своим пользователям поле для выбора их локали, в этом случае вы захотите moment-with-locales.min.js
вместо moment.min.js
выше.