Мне нужно получить последний день года в формате ISO, это строка 2020-31-12
.
Это не так просто, как можно себе представить, так как результат зависит от того, в какое время зона выполнена.
Это код, который у меня есть. Должно быть сказано одно. Команды new Date()
и date.toISOString(date)
выполняются в разных частях кода, и дата может иметь разные значения, поэтому это не так просто, как написать строку типа year + '-31-12'
.
var dateEnd = new Date(year, 11, 31, 24, 59, 59); //This creates a date in users timezone
// [...]
$(td).html(dateEnd.toISOString().substr(0, 10)); //This converts the date to UTC, performing a transformation
Если в качестве альтернативы я пытаюсь:
var endMonth = (dateEnd.getMonth() + 1).toString().padStart(2, '0');
var endDay = (dateEnd.getDate()).toString().padStart(2, '0');
$(td).html(dateEnd.getFullYear() + '-' + endMonth + '-' + endDay);
Удивительно, но он также выполняет преобразование, приводящее к 2021-01-01 в некоторых часовых поясах.
Еще одна альтернатива, которую я мог бы использовать new Date(year, 11, 31, 12, 0, 0)
что я не уверен, если это достаточно безопасно, когда используется в области GMT + 12.
Есть ли лучшее решение?
Я сделал эту скрипку, в зависимости от вашего часового пояса, результат может варьируются.
Спасибо.