Как создать ванильный тикер времени UTC? - PullRequest
0 голосов
/ 12 марта 2019

Я работаю с солнечным калькулятором и мне нужна контрольная дата / время, на которое НЕ влияют часовые пояса или изменения летнего времени.Как я стараюсь, javascript (и, я полагаю, браузер), разрушить плавное движение солнца в небе.Как я могу создать дату / время, через которое я могу шагать в шагах по минутам, часам, дням и месяцам, не вмешиваясь в это чертово летнее время?- Зоны и локализация не проблема.Проблема, похоже, заключается в том, что все мои определенные даты UTC всегда прыгают в DST.Только настоящее солнце этого не делает.

Некоторые из моих несчастных попыток здесь:

{   //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();
}

1 Ответ

1 голос
/ 13 марта 2019

Конструктор Date предполагает local, чтобы получить UTC, используйте Date.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.log(d.toISOString());
console.log(c.toISOString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...