Получить текущую дату, используя 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'")
Этот метод работал для меня