Формат 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