В Германии используются два разных формата даты:
Intl
API JavaScript использует «классический» формат даты для локали de-DE
:
// This prints out: 31.01.2022
console.info(new Intl.DateTimeFormat('de-DE', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
}).format(new Date(2022, 0, 31)));
Пожалуйста, найдите демо здесь: » Демо
Можно ли как-то использовать «современный» (= ISO-8601) формат даты с Intl, просто расширив языковой стандарт в приведенном выше примере («de-DE...»)? Например, использование локали de-DE-u-ca-iso8601
не работает.
Кстати: использование Date.prototype.toISOString
НЕ вариант.
[Изменить] Это также НЕ вариант просто использовать локаль для другой страны.
[Edit] Я надеялся найти ответ где-то здесь или здесь, но не нашел там решения.
[Изменить] Вы можете настроить формат времени по строке локали:en-GB
(показывает 24-часовой формат времени)en-GB-u-hc-h12
(показывает 12-часовой формат времени, добавляя am/pm)
... поэтому я надеялся, что что-то подобное также будет возможно с «дд.мм.гггг» против «гггг-мм-дд».
🤔 А знаете ли вы, что...
JavaScript имеет множество встроенных объектов, таких как Array, Date и Math.
Используйте en-CA
в качестве локали.
Afaik нет конкретной локали для форматирования в «современную» (iso) строку даты.
Либо разделите и измените порядок строки даты, либо используйте formatToParts
вместо format
, либо разделите результат Date.toISOString
, это могут быть другие идеи.
// 1. locale 'en-CA' (not an option as per comment)
console.info(new Intl.DateTimeFormat(`en-CA`, {
year: `numeric`, month: `2-digit`, day: `2-digit`})
.format(new Date(2022, 0, 31)));
// 2. split and reorder the result
console.info(new Intl.DateTimeFormat(`de-DE`, {
year: `numeric`, month: `2-digit`, day: `2-digit`})
.format(new Date(2022, 0, 31))
.split(`.`)
.reverse()
.join(`-`) );
// 3. use formatToParts
const reformatGerman = new Intl.DateTimeFormat(`de-DE`, {
year: 'numeric', month: '2-digit', day: '2-digit'})
.formatToParts(new Date(2022, 0, 31))
.filter( v => ~[`year`, `month`, `day`].indexOf(v.type) )
.reduce( (acc, val) => ({...acc, [val.type]: val.value}), {} );
console.info(`${
reformatGerman.year}-${
reformatGerman.month}-${
reformatGerman.day}`);
// 4. truncate the result of `toISOString()`
console.info(new Date(Date.UTC(2022, 0, 31))
.toISOString().split(`T`)[0]);