Получить текущую дату, используя date-fns в формате ISO-8601

Я хочу получить ISO-8601 формат последнего часа: минуты: секунды текущего дня, используя date-fns lib:

Я использую:endOfDay(new Date());

Fri Sep 14 2018 23:59:59 GMT-0300

Поэтому добавьте в ISOString(), чтобы получить его в формате ISO:endOfDay(new Date()).toISOString()

Результат:2018-09-15T02:59:59.999Z

Когда мне нужно:

2018-09-14T23:59:59.999Z

2 ответа

Решение

2018-09-14T23:59:59.999Z это не конец дня, рассчитанный endOfDay(new Date());, Это на 3 часа раньше. "Z" означает UTC, а ваш местный часовой пояс имеет смещение к UTC -0300,

Выполняя endOfDay Вы получаете значение даты, которое вы можете использовать в сравнениях и других вычислениях с другими значениями даты. Это полная дата со временем в местном часовом поясе.

Вы хотите сохранить тот же номер дня в отформатированной строке? Вы можете отформатировать дату в строку ISO 8601 в вашем местном часовом поясе:

format(endOfDay(new Date()), 'YYYY-MM-DD[T]HH:mm:ssZZ')
// Prints "2018-09-14T23:59:59.999-0300" in Brazil (BRT)

Хотите получить конец дня с тем же номером, что и сегодня в UTC? Если вы игнорируете фактическое окончание вашего дня по отношению к другим датам, вы можете просто объединить "последнюю секунду дня" с "Z":

format(new Date(), 'YYYY-MM-DD') + 'T23:59:59.999Z'
// Prints "2018-09-14T23:59:59.999Z" anywhere on Earth
      format(endOfDay(new Date()), "yyyy-MM-dd'T'HH:mm:ss'Z'")

Этот метод работал для меня

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