Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #51 (permalink)  
Старый 17.07.2018, 23:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от arkadii_parovozov
главное перезапустить браузер после манипуляций с системным временем
Я же писал, что не запускать скрипт при смене (или перегрузить систему, браузер). Просто объект Date получает метку, которую и использует.

То есть при смене летнего или без него все равно значения одинаковы?
Ответить с цитированием
  #52 (permalink)  
Старый 18.07.2018, 04:35
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от arkadii_parovozov
js не имеет прямого доступа к системному времени?
Все работает по RTC, это и есть системное время, часы реального времени. Система получает метку от реальных часов и далее отдает их для всех в системе посредством высокоточного таймера (не помню точно как он дразнится) как системное время, включая и часы которые идут. Не думаю чтобы JS работал напрямую с железом компьютера (RTC, это и есть "железяка" на материнской плате, ради которой на ней устанавливается и батарейка), об этом говорит и поведение скрипта при смене часового пояса.

Я потому и писал о неожиданности, которой в общем быть не должно. RTC изменяется как раз в настройках дата/время или в BIOS. При смене часового пояса, а значит и изменении времени, программы реагируют на изменения, например редактор будет предлагать сохранить изменения в открытых файлах. Почему я и не стал проверять то, что мог и упустить, меняя часовой пояс, слишком много файлов открыто было, чтобы все перещелкать.

Теперь можно и проверить. Все нормально, как и ожидалось, и должно быть, js сценарий отображает ровно то, что на системных часах. Но я ошибался, предлагая эксперимент, предполагая, что можно будет отловить использование или нет перехода на летнее время. Если сменить часовой пояс (сейчас как раз лето) на пояс с переходом на летнее время, то системные часы будут переведены на N часов вперед (согласно выбранному часовому поясу). Если снять флажок разрешающий переход на летнее время, то переводить часы назад придется вручную, ОС не изменит время. Естественно, что все эти изменения будут отражаться и на RTC, что можно проверить перезапуском системы. А значит и у клиента бага связанного с летним временем быть не должно. По идее такое можно было наблюдать один раз, когда js сценарий запущен и произошел системный переход на летнее время, что при последующем запуске браузера было бы устранено.

По идее так, вот как только проверить такой момент (эмулировать) я не знаю. О чем я знаю, о единственном баге со временем, это то, что системные часы и часы BIOS могут расходиться в показаниях на N секунд. Это связано как раз с точным таймером отдающем системное время приложениям. Об этом можно почитать на официальном сайте мелкософта.
Ответить с цитированием
  #53 (permalink)  
Старый 18.07.2018, 10:46
Кандидат Javascript-наук
Отправить личное сообщение для arkadii_parovozov Посмотреть профиль Найти все сообщения от arkadii_parovozov
 
Регистрация: 24.11.2016
Сообщений: 101

laimas, Спасибо! Да, все работает правильно если перезапускать браузер.

И что интересно, другие программы реагировали мгновенно на смену времени, нотпад сразу же предлагал сохранить изменения. А браузер получается берет метку при запуске и далее работает с ней сам.

Но ведь можно-же утверждать, что js не работает с системным временем, иначе он бы реагировал на изменения как и нотпад? Если даже не мгновенно, то хотя бы при создании нового объекта Data(). Но так как при перезагрузки страницы ничего не меняется, значит можно сделать вывод что js не отображает системное время в реальном времени, а то время которое было зафиксировано при запуске браузера.
Ответить с цитированием
  #54 (permalink)  
Старый 18.07.2018, 11:47
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от arkadii_parovozov
можно-же утверждать, что js не работает с системным временем
Нет, ибо нет ни у него, ни у кого иного своего времени. Вообще говоря о дате/времени в программной области, отсчет его ведется от искусственной метки, эпохе Unix, которая начинается с 1970 года. Если создать объект Date с некорректными параметрами как раз и будет возвращаться метка этой эпохи.

Сама ОС ведь не делает обслуживание аппаратных прерываний RTC каждую секунду, а берет текущую метку, на базе которой и создает системное время для ПО. Но она корректирует RTC к примеру по сигналам точного времени, которые выбраны в настройках. Есть и "крякушки" той же ОС, которые базируются на том, что подсовывают Windows "прожитое время", выдавая его за текущее, тем самым заставляя думать ОС, что пробный бесплатный период еще не закончился.

Я не автор JS и бог его знает как он поступает, но уж точно доступ к системному железу он не имеет, иначе бы дыр в безопасности было бы немеряно. Получается, что он берет метку, которую затем и использует. Система же не просто "диспетчер", но и еще и генерирует события "windows messages", которые могут получать и использовать прикладные программы. И в случае смены часового пояса, перехода на летнее время, система обязательно установит соответствующее событие, а далее уж хозяин барин реагировать на него или нет. Получается, что браузеру/JS по барабану это, "не царское дело в ...".
Ответить с цитированием
  #55 (permalink)  
Старый 18.07.2018, 12:29
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от arkadii_parovozov
А браузер получается берет метку при запуске и далее работает с ней сам.
Это не нормально, возможно это баг нового браузера Firefox Quantum, в прежнем Firefox я помню время менялось сразу, в других браузерах IE, Chrome, Opera, Yandex, у меня тоже меняется сразу. Как проверял, открыл все браузеры, изменил часовой пояс на Баку, выполнил в консолях new Date().getHours(), везде произошел сдвиг, кроме Firefox, в нем только после перезагрузки браузера. Но, автор, это всё равно не объясняет, несоответствие времени у вашего клиента, ведь по вашей же логике время не меняется раз берёт метку при запуске, т.е. получается что у вашего клиента до такого как открыть браузер был один часовой пояс, затем он открыл браузер, поменял пояс на час вперед, зашел на ваш сайт и возмутился, ну бред какой-то, такое ощущение что вы там что-то крутите у себя в Firefox, а нам тут сказки рассказываете о несуществующем клиенте) Как это объяснить, он что путешествовал, менял время на ноуте и браузер долго не закрывал?

Последний раз редактировалось Rise, 18.07.2018 в 12:35.
Ответить с цитированием
  #56 (permalink)  
Старый 18.07.2018, 12:42
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Rise
возможно это баг нового браузера Firefox Quantum
Да, видимо так, только Firefox Quantum и лажает, тоже на всех имеющихся в системе проверил, такая же байда.
Ответить с цитированием
  #57 (permalink)  
Старый 18.07.2018, 12:51
Кандидат Javascript-наук
Отправить личное сообщение для arkadii_parovozov Посмотреть профиль Найти все сообщения от arkadii_parovozov
 
Регистрация: 24.11.2016
Сообщений: 101

Сообщение от Rise Посмотреть сообщение
Как это объяснить, он что путешествовал, менял время на ноуте и браузер долго не закрывал?
Все верно кроме "путешествовал". Я не буду объяснять структуру и логику работы сайта, но могу уверить Вас в том что клиент именно так и поступал. Браузер может долгое время не закрываться, но иногда нужно поменять системное время. И фокус в том, что если просто на часах менять время, то срабатывает все правильно, а если часовой пояс менять или переключать на смену времени, по время разное. Видимо ковырялся в настройках времени при работающим браузере, вот и проявился баг.
Ответить с цитированием
  #58 (permalink)  
Старый 18.07.2018, 13:31
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

laimas,
arkadii_parovozov,
Интересно, что в Firefox Quantum, если открыть новый таб и загрузить страницу, то тогда время изменится на новое, а в старом табе останется прежнее пока не закроешь, получается в каждом табе можно сделать свое время, НО даже после перезагрузки таба старое время сохраняется, поэтому подозреваю баг, видимо результат хваленой многопоточности.

arkadii_parovozov, т.е. теперь получается ваш клиент не просто браузер долго не закрывает, но и таб?))

Последний раз редактировалось Rise, 18.07.2018 в 13:45.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с информационым таймером Александр2233 Javascript под браузер 22 11.12.2019 12:31
Подгрузить несколько значения с php файла в разные места документа serdef Элементы интерфейса 2 30.07.2014 23:48
Разные значения в зависимости от опций Batyabest Events/DOM/Window 28 26.11.2013 19:40
передать в обьект Date массив из [ секунды, минуты, часы ] Livanderiaamarum Общие вопросы Javascript 11 16.12.2011 23:44
Разные значения clientWidth в ie и ff SILVERSPEED Events/DOM/Window 6 20.04.2010 01:11