Последний день года: код действителен для любого часового пояса - PullRequest
0 голосов
/ 09 января 2020

Мне нужно получить последний день года в формате 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.

Есть ли лучшее решение?

Я сделал эту скрипку, в зависимости от вашего часового пояса, результат может варьируются.

Спасибо.

1 Ответ

0 голосов
/ 09 января 2020

Попробуйте приведенный ниже код.

d = new Date();
iso_d = d.toISOString();
iso_d.split("T")[0];

...