Формат date-fns не форматирует должным образом микросекунды?

Я использую следующий скрипт, чтобы преобразовать микросекунды в чч: мм, используя date-fns, но получаю неправильное форматирование:

const microSeconds = 100000000 format(addMilliseconds(new Date(0), microSeconds / 1000), 'hh:mm')}

например, в этом случае мне нужно получить "00:01", но вместо этого я получаю 01:01

Есть идеи как это исправить?

Запускаемый код https://stackblitz.com/edit/date-fns-playground-cdgduf

2 ответа

Решение

Это потому что date-fns Функция форматирования опирается на локали. Документы формата содержат информацию (под таблицей с принятыми токенами):

Результат может отличаться в зависимости от региона.

Вы можете вычесть смещение часового пояса:

const d = new Date(0);
const formatedValue = format(
   addMilliseconds(new Date(0 + d.getTimezoneOffset()*1000*60), microSeconds / 1000), 'HH:mm')

Измените также формат даты на HH:mm, так как hh между 01 и 12

Согласно этому примеру:

import { format } from 'date-fns';
const formatedValue = format(0, 'hh:mm')
// output: 01:00

Вы не должны использовать date-fns просто конвертировать продолжительность в удобочитаемую человеком string так как это всегда зависит от часовых поясов. Вы должны реализовать свою собственную функцию форматирования, так как это базовое деление и умножение.

Рабочий пример => https://stackblitz.com/edit/date-fns-playground-whz5tg?file=app.ts

Другие вопросы по тегам