Конвертация в другие единицы

Библиотека date-fns предоставляет набор функций для преобразования временных интервалов в различные единицы измерения. Такие операции особенно важны при работе с таймерами, аналитикой, дедлайнами, журналами событий, системами бронирования и пользовательскими интерфейсами.

Date-fns не изменяет исходные объекты Date, работает в функциональном стиле и позволяет выполнять точные вычисления без сторонних зависимостей.


Преобразование миллисекунд в секунды

Для конвертации миллисекунд используется функция millisecondsToSeconds.

import { millisecondsToSeconds } from 'date-fns'

const result = millisecondsToSeconds(5500)

console.log(result)

Результат:

5

Функция округляет значение вниз до ближайшего целого числа.

Особенности

millisecondsToSeconds(1999) // 1
millisecondsToSeconds(2000) // 2
millisecondsToSeconds(2500) // 2

Использование с Date.now()

const start = Date.now()

setTimeout(() => {
  const end = Date.now()

  const duration = millisecondsToSeconds(end - start)

  console.log(`Прошло секунд: ${duration}`)
}, 3500)

Преобразование секунд в миллисекунды

Функция secondsToMilliseconds выполняет обратное преобразование.

import { secondsToMilliseconds } from 'date-fns'

const result = secondsToMilliseconds(10)

console.log(result)

Результат:

10000

Практическое применение

const delay = secondsToMilliseconds(5)

setTimeout(() => {
  console.log('Прошло 5 секунд')
}, delay)

Преобразование минут в секунды

Для преобразования минут используется minutesToSeconds.

import { minutesToSeconds } from 'date-fns'

const result = minutesToSeconds(3)

console.log(result)

Результат:

180

Пример таймера

const duration = minutesToSeconds(15)

console.log(`Таймер: ${duration} секунд`)

Преобразование секунд в минуты

Функция secondsToMinutes конвертирует секунды обратно.

import { secondsToMinutes } from 'date-fns'

const result = secondsToMinutes(360)

console.log(result)

Результат:

6

Округление

secondsToMinutes(59)  // 0
secondsToMinutes(60)  // 1
secondsToMinutes(119) // 1

Преобразование часов в минуты

Функция hoursToMinutes переводит часы в минуты.

import { hoursToMinutes } from 'date-fns'

const result = hoursToMinutes(2)

console.log(result)

Результат:

120

Использование в расписаниях

const workDay = hoursToMinutes(8)

console.log(`Рабочий день: ${workDay} минут`)

Преобразование минут в часы

Для обратной операции используется minutesToHours.

import { minutesToHours } from 'date-fns'

const result = minutesToHours(180)

console.log(result)

Результат:

3

Поведение функции

minutesToHours(59)  // 0
minutesToHours(60)  // 1
minutesToHours(61)  // 1

Преобразование дней в часы

Функция daysToHours преобразует дни в часы.

import { daysToHours } from 'date-fns'

const result = daysToHours(3)

console.log(result)

Результат:

72

Расчёт длительности проекта

const sprint = daysToHours(14)

console.log(`Спринт длится ${sprint} часов`)

Преобразование часов в дни

Функция hoursToDays используется для получения количества дней.

import { hoursToDays } from 'date-fns'

const result = hoursToDays(48)

console.log(result)

Результат:

2

Пример

hoursToDays(23) // 0
hoursToDays(24) // 1
hoursToDays(50) // 2

Преобразование недель в дни

Функция weeksToDays конвертирует недели в дни.

import { weeksToDays } from 'date-fns'

const result = weeksToDays(4)

console.log(result)

Результат:

28

Пример расчёта периода

const probation = weeksToDays(12)

console.log(`Испытательный срок: ${probation} дней`)

Преобразование дней в недели

Функция daysToWeeks выполняет обратную конвертацию.

import { daysToWeeks } from 'date-fns'

const result = daysToWeeks(21)

console.log(result)

Результат:

3

Округление

daysToWeeks(6) // 0
daysToWeeks(7) // 1
daysToWeeks(8) // 1

Преобразование месяцев в кварталы

Функция monthsToQuarters используется для работы с финансовыми и отчётными периодами.

import { monthsToQuarters } from 'date-fns'

const result = monthsToQuarters(6)

console.log(result)

Результат:

2

Использование в аналитике

const quarters = monthsToQuarters(12)

console.log(`Год содержит ${quarters} квартала`)

Преобразование кварталов в месяцы

Функция quartersToMonths выполняет обратное преобразование.

import { quartersToMonths } from 'date-fns'

const result = quartersToMonths(2)

console.log(result)

Результат:

6

Преобразование лет в месяцы

Функция yearsToMonths переводит годы в месяцы.

import { yearsToMonths } from 'date-fns'

const result = yearsToMonths(3)

console.log(result)

Результат:

36

Пример расчёта подписки

const months = yearsToMonths(2)

console.log(`Подписка рассчитана на ${months} месяцев`)

Преобразование месяцев в годы

Функция monthsToYears используется для получения количества лет.

import { monthsToYears } from 'date-fns'

const result = monthsToYears(48)

console.log(result)

Результат:

4

Поведение при неполных значениях

monthsToYears(11) // 0
monthsToYears(12) // 1
monthsToYears(25) // 2

Цепочки преобразований

Функции Date-fns легко комбинируются между собой.

Пример: дни → часы → минуты

import {
  daysToHours,
  hoursToMinutes
} from 'date-fns'

const hours = daysToHours(2)
const minutes = hoursToMinutes(hours)

console.log(minutes)

Результат:

2880

Работа с дробными значениями

Некоторые функции принимают дробные числа.

minutesToSeconds(1.5)

Результат:

90

Однако обратные функции обычно округляют результат вниз.

secondsToMinutes(90)

Результат:

1

Использование Math.floor, Math.ceil и Math.round

Для более гибкого контроля над округлением можно комбинировать Date-fns со стандартным объектом Math.

Округление вниз

const minutes = Math.floor(90 / 60)

console.log(minutes)

Округление вверх

const minutes = Math.ceil(90 / 60)

console.log(minutes)

Стандартное округление

const minutes = Math.round(90 / 60)

console.log(minutes)

Конвертация пользовательской длительности

Пример структуры

const duration = {
  days: 2,
  hours: 5,
  minutes: 30
}

Преобразование в минуты

import {
  daysToHours,
  hoursToMinutes
} from 'date-fns'

const totalMinutes =
  hoursToMinutes(daysToHours(duration.days)) +
  hoursToMinutes(duration.hours) +
  duration.minutes

console.log(totalMinutes)

Результат:

3210

Расчёт времени выполнения операции

import { millisecondsToSeconds } from 'date-fns'

const start = performance.now()

for (let i = 0; i < 1000000; i++) {}

const end = performance.now()

const executionTime =
  millisecondsToSeconds(end - start)

console.log(executionTime)

Конвертация времени для отображения

Перевод секунд в часы

import { secondsToMinutes, minutesToHours } from 'date-fns'

const seconds = 7200

const minutes = secondsToMinutes(seconds)
const hours = minutesToHours(minutes)

console.log(hours)

Результат:

2

Работа с Unix Timestamp

Unix Timestamp обычно хранится в секундах, а JavaScript использует миллисекунды.

Конвертация секунд в формат JavaScript

import { secondsToMilliseconds } from 'date-fns'

const unix = 1716000000

const date = new Date(
  secondsToMilliseconds(unix)
)

console.log(date)

Обратная операция

import { millisecondsToSeconds } from 'date-fns'

const timestamp = millisecondsToSeconds(Date.now())

console.log(timestamp)

Список основных функций конвертации

Функция Назначение
millisecondsToSeconds Миллисекунды → секунды
secondsToMilliseconds Секунды → миллисекунды
minutesToSeconds Минуты → секунды
secondsToMinutes Секунды → минуты
hoursToMinutes Часы → минуты
minutesToHours Минуты → часы
daysToHours Дни → часы
hoursToDays Часы → дни
weeksToDays Недели → дни
daysToWeeks Дни → недели
monthsToQuarters Месяцы → кварталы
quartersToMonths Кварталы → месяцы
yearsToMonths Годы → месяцы
monthsToYears Месяцы → годы

Особенности конвертации в Date-fns

Иммутабельность

Все функции возвращают новое значение и не изменяют исходные данные.

const value = 120

const result = minutesToHours(value)

console.log(value)  // 120
console.log(result) // 2

Tree Shaking

Date-fns позволяет импортировать только необходимые функции.

import { daysToHours } from 'date-fns'

Это уменьшает размер итогового JavaScript-бандла.

Простота композиции

Функции легко комбинируются между собой.

const minutes =
  hoursToMinutes(daysToHours(3))

Предсказуемое округление

Большинство функций округляют результат вниз, что важно учитывать при расчётах интерфейсов, таймеров и статистики.