Как получить формат даты 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 шт):
По-моему это самый короткий вариант :)
const dateTime = new Date().toString().split(' ');
console.log(`${dateTime[2]}-${dateTime[1]}-${dateTime[3]} ${dateTime[4]}`);
Можно попробовать через 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
Мне кажется, имеет право на жизнь такой вариант:
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}`);
У 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(':')}`)