Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.07.2018, 18:40
Кандидат Javascript-наук
Отправить личное сообщение для arkadii_parovozov Посмотреть профиль Найти все сообщения от arkadii_parovozov
 
Регистрация: 24.11.2016
Сообщений: 101

date() и часы на компьютере показывают разные значения
Всем привет!

По сути вопрос в теме. Если более подробно, то: вывожу время на странице (в браузере) с помощью date(), весь код часов:

function SimpleClock()
{
    //создаем объект с текущей датой и временем
    var tekDate = new Date();
    //получаем из объекта часы, минуты и секунды
    var hour = tekDate.getHours();
    var minute = tekDate.getMinutes();
    var seconds = tekDate.getSeconds();
    //определ¤ем день недели
	var now = new Date();
	var dayNames = new Array("Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота");
	var now = new Date();
	var textout;
	var month = now.getMonth();
	var date = now.getDate();
	textout = date;
	if (month==0) textout+=" Января";
	if (month==1) textout+=" февраля";
	if (month==2) textout+=" марта";
	if (month==3) textout+=" апреля";
	if (month==4) textout+=" мая";
	if (month==5) textout+=" июня";
	if (month==6) textout+=" июля";
	if (month==7) textout+=" августа";
	if (month==8) textout+=" сентября";
	if (month==9) textout+=" октября";
	if (month==10) textout+=" ноября";
	if (month==11) textout+=" декабря";
    //дл¤ того чтобы минуты и секунды до 10 отображались корректно с нулем
    minute=((minute < 10) ? "0" : "") + minute;
    seconds =((seconds < 10) ? "0" : "") + seconds;
    //смотрим чтобы часы не переваливали за 24 
    hour=(hour > 24) ? hour-24 : hour;
    hour=(hour == 0) ? 0 : hour;
    //задаем окончательное значение времени
    var clock = hour + ":" + minute + ":" + seconds;
    //отрисовываем врем¤ на странице
    if(clock != document.getElementById('idClock').innerHTML){ 
			$("#idDate").html(textout+" "+now.getFullYear()+" <br><font size='-1' color='#999'>"+dayNames[now.getDay()]+"</font>");
			document.getElementById('idClock').innerHTML = clock;
			if(month<12){month=month+1;}
			if(month<10){month="0"+month;}
			if(date<10){date="0"+date;}
			$("#data_klient").val(now.getFullYear()+"-"+month+"-"+date+" "+clock);
	}
	//выполн¤ем все это каждую секунду
    timer = setTimeout("SimpleClock()",1000);
}


Далее отправляю эти данные аяксом (по событию) на сервер, просто перекидываю и записываю в БД. И всё работает как надо и никаких проблем. Но появился пользователь который заметил что в БД записывается время на один час меньше чем показывают его часы на компьютере.

Скажите как такое может произойти?
Откуда берет своё значение объект date?
Ответить с цитированием
  #2 (permalink)  
Старый 17.07.2018, 18:59
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от arkadii_parovozov
Откуда берет своё значение объект date?
С компьютера клиента
Ответить с цитированием
  #3 (permalink)  
Старый 17.07.2018, 19:04
Кандидат Javascript-наук
Отправить личное сообщение для arkadii_parovozov Посмотреть профиль Найти все сообщения от arkadii_parovozov
 
Регистрация: 24.11.2016
Сообщений: 101

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

Но пользователь присылает скриншот экрана с часами, и временем которое записалось в БД, и в БД разница на один час меньше. Как такое может произойти?
Ответить с цитированием
  #4 (permalink)  
Старый 17.07.2018, 19:10
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от arkadii_parovozov
Как такое может произойти?
Если в базу пишется то, что прислал клиент, то никакого сдвига быть не может.
Ответить с цитированием
  #5 (permalink)  
Старый 17.07.2018, 19:16
Кандидат Javascript-наук
Отправить личное сообщение для arkadii_parovozov Посмотреть профиль Найти все сообщения от arkadii_parovozov
 
Регистрация: 24.11.2016
Сообщений: 101

Сообщение от laimas Посмотреть сообщение
Если в базу пишется то, что прислал клиент, то никакого сдвига быть не может.
А как это можно вбить в голову клиенту? Вот он видит у себя на часах (на мониторе) одно время, а в бд прилетает время на один час меньше, притом, я в базу просто записываю то что находится здесь: $("#data_klient").val(now.getFullYear()+"-"+month+"-"+date+" "+clock);

Может такое быть то браузер показывает одно время а часы компьютера другое? И из за чего такое может быть?
Ответить с цитированием
  #6 (permalink)  
Старый 17.07.2018, 19:17
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от arkadii_parovozov
Может такое быть то браузер показывает одно время а часы компьютера другое? И из за чего такое может быть?
у браузера своих часов нет.
Ответить с цитированием
  #7 (permalink)  
Старый 17.07.2018, 19:22
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Я не знаю конфигурацию вашего сервера, но у БД свои настройки системного времени. Но как бы то ни было, хостер никогда не установит разное время для сервера и БД. Системное время сервера в базу запишется только тогда, когда вы будет использовать функции базы, например NOW() в MySQL.

Время может изменится также если не учитывать переход на летнее время, то есть у нас его нет, а у кого-то есть и при этом клиент работает по времени сервера. Но у вас в базу пишется локальное время клиента, и если оно выводится из базы без преобразований (не используется как временная метка в JS сценариях на клиенте или не подлежит изменению серверным скриптом), то для этого клиента оно будет таким каким записано в базе.
Ответить с цитированием
  #8 (permalink)  
Старый 17.07.2018, 19:48
Кандидат Javascript-наук
Отправить личное сообщение для arkadii_parovozov Посмотреть профиль Найти все сообщения от arkadii_parovozov
 
Регистрация: 24.11.2016
Сообщений: 101

laimas, спасибо! Но БД на моем сервере здесь не причем. Я тупо записываю то время которое присылает клиент. То есть, если от клиента я получаю такое время: 2018-11-28 17:15:18 то я его таким и записываю.

Проблема здесь в другом. Пользователь утверждает что то время которое выводится у него на странице (которое я ему вывожу функцией date() в его-же браузере) показывает время на один час меньше чем показывают его часы на компьютере (системные часы в нижнем углу). Такое вообще возможно?

Понятное дело что я проверяю на своем компьютере и не только, и такого не наблюдаю. Но это не означает что такое не может быть, или означает?
Ответить с цитированием
  #9 (permalink)  
Старый 17.07.2018, 19:52
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

arkadii_parovozov,
значит нужно копать глубже, C# .NET форуме попробуйте поспрашивать
Ответить с цитированием
  #10 (permalink)  
Старый 17.07.2018, 19:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Если в базу пишется 2018-11-28 17:15:18, которое прислал клиент, извлекается и выводится ему же, например сразу, то разница может быть в секундах или минутах так как и время не стоит на месте, плюс время на запрос/ответ.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с информационым таймером Александр2233 Javascript под браузер 21 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