js конвертировать дату

Рейтинг: 0Ответов: 3Опубликовано: 25.05.2023

В приложении я получаю timestamp - 1683799613782 11 мая 13 06, как преобразовать эти циферки 1683799613782 в дату 11 мая 00:00, то есть обрезать минуты этого дня, ответа на выходе должен быть в миллисекундах, то есть что-то типа это 1683799613782, но чтобы я это число положил в конвертор миллисекнд и он мне выдал 2023 11 мая 00:00, по идее можно конечно взять одни сутки в млс - 86400000 разделить получаемое число 1683799613782 на 86400000 остальное отбросить и получить ответ, но может кто-то предложит решение получше? мы используем date fns and dateformat, если это важно для задачи

Ответы

▲ 1

что-то типа это 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`
}

▲ 1

Или можно вот так (не особо отличается от варианта @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()}`;
}

▲ -1

Вообще, правильное время получается 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('')
}