js конвертировать дату
В приложении я получаю timestamp - 1683799613782 11 мая 13 06, как преобразовать эти циферки 1683799613782 в дату 11 мая 00:00, то есть обрезать минуты этого дня, ответа на выходе должен быть в миллисекундах, то есть что-то типа это 1683799613782, но чтобы я это число положил в конвертор миллисекнд и он мне выдал 2023 11 мая 00:00, по идее можно конечно взять одни сутки в млс - 86400000 разделить получаемое число 1683799613782 на 86400000 остальное отбросить и получить ответ, но может кто-то предложит решение получше? мы используем date fns and dateformat, если это важно для задачи
Ответы (3 шт):
что-то типа это 1683799613782, но чтобы я это число положил в конвертор миллисекнд и он мне выдал 2023 11 мая 00:00
Такой вариант можно предложить...
const n = 1683799613782
console.log(dTOs(n)) // 2023 11 мая 00:00
//
function dTOs(n) {
const s = {
'05': 'мая'
}
let d = new Date(n)
d = d.toISOString()
d = d.split('T')[0].split('-')
return `${d[0]} ${+d[2]} ${s[d[1]]} 00:00`
}
Или можно вот так (не особо отличается от варианта @ksa, который мне показался интересным, но ради демонстрации возможностей объекта Date() оставлю это здесь):
let timestamp = 1683799613782;
console.log(formatDate(timestamp))
function formatDate(timestamp) {
let monthNames = ['Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря'];
let date = new Date(timestamp);
return `${date.getFullYear()} ${date.getDate()} ${monthNames[date.getMonth()]} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`;
}
Вообще, правильное время получается 13:06 (Часы и минуты), поэтому я сделал два варианта, в одном где правильно:
(Я использовал Intl.DateTimeFormat, стоит обратить внимание на то, что поддержка у него такая себе и был он добавлен относительно давно)
const timestamp = 1683799613782
const result = convertDate(timestamp)
console.log(result) // 2023 11 мая 13:06
function convertDate(timestamp) {
const date = new Date(timestamp)
const parts = new Intl.DateTimeFormat('ru', {
year: 'numeric',
day: 'numeric',
month: 'long',
hour: 'numeric',
minute: 'numeric'
}).formatToParts(date)
const indexMap = {
year: 0,
day: 2,
month: 4,
hour: 6,
minute: 8
}
const result = [
void 0, ' ', // Year
void 0, ' ', // Day
void 0, ' ', // Month
void 0, ':', // Hour
void 0 // Minute
]
for (let i = 0; i < parts.length; i++) {
const part = parts[i]
const { type, value } = part
const index = indexMap[type]
result[index] = value
}
return result.join('')
}
И второй вариант, так как вы хотели:
const timestamp = 1683799613782
const result = convertDate(timestamp)
console.log(result) // 2023 11 мая 00:00
function convertDate(timestamp) {
const date = new Date(timestamp)
const parts = new Intl.DateTimeFormat('ru', {
year: 'numeric',
day: 'numeric',
month: 'long'
}).formatToParts(date)
const indexMap = {
year: 0,
day: 2,
month: 4
}
const result = [
void 0, ' ', // Year
void 0, ' ', // Day
void 0, ' ', // Month
'00:00'
]
for (let i = 0; i < parts.length; i++) {
const part = parts[i]
const { type, value } = part
const index = indexMap[type]
result[index] = value
}
return result.join('')
}