Как получить формат даты XX-Abc-20XX XX:XX:XX (пример 22-Jul-2022 05:41:33) из объекта Date?

let date = new Date();

console.log(date.getDate() + '-' + date.toLocaleString("en-us", {
  month: "short"
}) + '-' + date.getFullYear() + " " + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds());

Есть такой код, но мне он кажется слишком громоздким. Возможно есть более правильный вариант вывода даты в таком формате?


Ответы (4 шт):

Автор решения: EzioMercer

По-моему это самый короткий вариант :)

const dateTime = new Date().toString().split(' ');

console.log(`${dateTime[2]}-${dateTime[1]}-${dateTime[3]} ${dateTime[4]}`);

→ Ссылка
Автор решения: PZBird

Можно попробовать через Intl

const date = new Date()
const options = {
  year: 'numeric',
  month: 'short',
  day: 'numeric',
  hour: 'numeric',
  minute: 'numeric',
  second: 'numeric',
  hour12: false
}
console.log(new Intl.DateTimeFormat('en-GB', options).format(date));

Примеры можно посмотреть тут на developer.mozilla.org

→ Ссылка
Автор решения: another_login

Мне кажется, имеет право на жизнь такой вариант:

const fullDate = new Date();
let date = fullDate.toDateString().split(' ');
let time = fullDate.toTimeString().slice(0, 8);
console.log(`${date[2]}-${date[1]}-${date[3]} ${time}`);

→ Ссылка
Автор решения: Daniil Loban

У Intl.DateTimeFormat есть очень удобная функция formatToParts которая позволяет извлечь массив данных из отформатированной строки.

В таком формате:

[
  { "type": "month",   "value": "Jul" },
  { "type": "literal", "value": " "   },
  { "type": "day",     "value": "22"  },
  { "type": "literal", "value": ", "  },
  { "type": "year",    "value": "2022"},
  { "type": "literal", "value": ", "  },
  { "type": "hour",    "value": "18"  },
  { "type": "literal", "value": ":"   },
  { "type": "minute",  "value": "08"  },
  { "type": "literal", "value": ":"   },
  { "type": "second",  "value": "24"  }
]

Таким образом этим можно воспользоваться для дальнейшего форматирования. Ниже привожу пример где я для простоты ориентируюсь на индексы в этом массиве на не на type (если речь идет о создании библитеки то лучше ориентироваться на type)

let f = new Intl.DateTimeFormat('en', {
  year: 'numeric',
  month: 'short',
  day: 'numeric',
  hour: 'numeric',
  minute: 'numeric',
  second: 'numeric',
  hour12: false
});
// извлекаем части строки отбрасываем все что не буквы и числа 
let p = f.formatToParts().map(e => e.value).filter(e => e.match(/\d+|[A-z]+/))
let t = p[0]; p[0] = p[1]; p[1] = t; // меняем местами день и месяц
// объединяем группы через тире и двоеточия
console.log(`${p.slice(0, 3).join('-')} ${p.slice(3).join(':')}`)

→ Ссылка