Я работаю с калькулятором солнца, и мне нужна эталонная дата/время, которые НЕ зависят от часовых поясов или изменений летнего времени. Сколько я ни пытаюсь, джаваскрипт (и браузер, полагаю), рушат плавный ход солнца по небу. Как я могу создать дату/время, которые я могу проходить в минутах, часах, днях, месяцах без вмешательства этого проклятого летнего времени? - Зоны и локализация не проблема. Проблема, кажется, в том, что все мои определенные даты UTC всегда прыгают в летнее время и выходят из него. Только настоящего солнца нет.
Некоторые из моих неудачных попыток здесь:
{ //UTC DATE OVERALL
myutcdate=new Date(mydate.getUTCFullYear(),mydate.getUTCMonth(),mydate.getUTCDate(),mydate.getUTCHours(),mydate.getUTCMinutes());
//myutcdate=new Date(mydate.valueOf()-localoffset*60*60*1000);
//var utcoffset=myutcdate.getTimezoneOffset/-60;
//if (mydate.isDST() && !myutcdate.isDST())myutcdate.setHours(myutcdate.getHours()+1);
//if (myutcdate.isDST())myutcdate.setHours(myutcdate.getHours()-1);
//myutcdate= new Date(mydate.getUTCFullYear(),mydate.getUTCMonth(),mydate.getUTCDate(),mydate.getUTCHours(),mydate.getUTCMinutes(),);
//myutcdate= new Date(mydate.toUTCString());
//myutcdate= new Date(mydate).toISOString();// returns just a sring, not a date, and cannot be converted to a date
//myutcdate= new Date(mydate.toISOString());//returns plain local time
//myutc= new Date(mydate.valueOf() - parseInt(localoffset)*60*60*1000 );
//myutcdate=Date.UTC(myutc.getFullYear(),myutc.getMonth(),myutc.getDate(),myutc.getHours(),myutc.getMinutes());
//myutcdate= new Date(myutcdate);
//document.getElementById('utcdate').innerHTML=myutcdate;//.toSimpleIso(); //myutcdate with own format
//document.getElementById('utcdate').innerHTML=myutcdate.getUTCFullYear()+"-"+String(myutcdate.getUTCMonth()+1)+"-"+myutcdate.getUTCDate()+" "+myutcdate.getUTCHours()+":"+myutcdate.getUTCMinutes();//.toSimpleIso(); //Yields to reducing double the zone of source date
//document.getElementById('utcdate').innerHTML=myutcdate.getFullYear()+"-"+String(myutcdate.getMonth()+1)+"-"+myutcdate.getDate()+" "+myutcdate.getHours()+":"+myutcdate.getMinutes();//.toSimpleIso(); //myutcdate with own format
document.getElementById('utcdate').innerHTML=mydate.toISOString();
}
Я предлагаю вам проверить библиотеки, упомянутые здесь: github.com/you-dont-need/You-Dont-Need-Momentjs, однако это не будет ванилью. В любом случае, мне не ясно, что именно вы делаете неправильно, так как UTC не имеет поправки на летнее время, может иметь только местное время.
Любая дата, которую я создаю, перескакивает на летнее время и обратно при передаче даты и времени переключения, независимо от того, как я ее определяю. Как определено UTC, они просто начинают с нулевой зоны, но добавляют один час в этом году 31 марта, с 03:00 до 04:00.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Конструктор Date предполагает локальный, чтобы получить UTC, используйте Дата.UTC для генерации значения времени, например.
// Instead of
new Date(mydate.getUTCFullYear(), ...)
// Use
new Date(Date.UTC(mydate.getUTCFullYear(),...))
//-------^^^^^^^^
Затем используйте методы UTC для всего.
var d = new Date();
// Copy date using UTC values
var c = new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds()));
console.info(d.toISOString());
console.info(c.toISOString());Спасибо, вот оно! Теперь мое солнце плавно скользит по небу, несмотря на земные (дурацкие) настройки часов. Как же я сам не нашел? На каждый запрос предлагались разные библиотеки, но не это нативное решение. Это я называю ванилью. Обнимать
Пожалуйста, отформатируйте код.