Как создать ванильный тикер времени UTC?

Я работаю с калькулятором солнца, и мне нужна эталонная дата/время, которые НЕ зависят от часовых поясов или изменений летнего времени. Сколько я ни пытаюсь, джаваскрипт (и браузер, полагаю), рушат плавный ход солнца по небу. Как я могу создать дату/время, которые я могу проходить в минутах, часах, днях, месяцах без вмешательства этого проклятого летнего времени? - Зоны и локализация не проблема. Проблема, кажется, в том, что все мои определенные даты 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();
}

Пожалуйста, отформатируйте код.

ZorgoZ 12.03.2019 19:36

Я предлагаю вам проверить библиотеки, упомянутые здесь: github.com/you-dont-need/You-Dont-Need-Momentjs, однако это не будет ванилью. В любом случае, мне не ясно, что именно вы делаете неправильно, так как UTC не имеет поправки на летнее время, может иметь только местное время.

ZorgoZ 12.03.2019 19:43

Любая дата, которую я создаю, перескакивает на летнее время и обратно при передаче даты и времени переключения, независимо от того, как я ее определяю. Как определено UTC, они просто начинают с нулевой зоны, но добавляют один час в этом году 31 марта, с 03:00 до 04:00.

Stobal45 12.03.2019 20:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Конструктор 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());

Спасибо, вот оно! Теперь мое солнце плавно скользит по небу, несмотря на земные (дурацкие) настройки часов. Как же я сам не нашел? На каждый запрос предлагались разные библиотеки, но не это нативное решение. Это я называю ванилью. Обнимать

Stobal45 13.03.2019 03:37

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