Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Вывод серверного времени на сайте (https://javascript.ru/forum/dom-window/58143-vyvod-servernogo-vremeni-na-sajjte.html)

McCloud 07.09.2015 09:36

Вывод серверного времени на сайте
 
Всем привет!

Подскажите пожалуйста: как сделать чтобы отображалось время на сайте, при этом, чтобы если задал, например, GMT+6 - то оно и будет всегда показываться, независимо от того, какое время стоит на копьютере у пользователя.

Использую такое решение:

<SCRIPT Language="JavaScript">
function ClockTimeZone() {
  var TimezoneOffset = 6 // указать нужное смещение по Гринвичу
  var localTime = new Date();
  var ms = localTime.getTime() + (localTime.getTimezoneOffset() * 60000) + TimezoneOffset * 3600000;
  var time = new Date(ms); 
  var hour = time.getHours(); 
  var minute = time.getMinutes();
  var second = time.getSeconds();
  var temp = "" + ((hour < 10) ? "0" : "") + hour;
  temp += ((minute < 10) ? ":0" : ":") + minute;
  temp += ((second < 10) ? ":0" : ":") + second;
  document.getElementById('clock').innerHTML = temp;
  setTimeout("ClockTimeZone()",1000);
}
onload = ClockTimeZone;
</SCRIPT>


Однако, при неправильном времени на компьютере пользователя, данный скрипт будет также выводить неправильное время. Как нужно переписать, чтобы он был привязан не ко времени с системы пользователя, а к серверному времени (с корректировкой +/- по GMT) ?

Спасибо!

рони 07.09.2015 09:45

McCloud,
нужно время сервера послать при открытии страницы, а потом к этому времени плюсовать время прошедшее с открытия страницы.

Эдди 07.09.2015 16:41

Может, не в тему, но если речь о дате и об онлайн заказах, то вот это неплохо:
date_default_timezone_set('Europe/Moscow');

Правильно я делаю, чтобы время было в любой части планеты мое?

laimas 07.09.2015 17:24

Цитата:

Сообщение от Эдди
Правильно я делаю, чтобы время было в любой части планеты мое?

В смысле времени сервера?
date_default_timezone_set('Europe/Moscow') это будет временем временем сервера для РНР, но не для SQL.

Эдди 08.09.2015 16:51

Цитата:

Сообщение от laimas (Сообщение 387427)
В смысле времени сервера?
date_default_timezone_set('Europe/Moscow') это будет временем временем сервера для РНР, но не для SQL.

Если я не буду использовать sql NOW(), а писать время только через php, то время sql мне не важно ведь?
Есть какие подводные камни?

laimas 08.09.2015 17:44

Если не использовать функции sql, которые работают по системному времени, пожалуйста. Но трудно представить запросы, в которых нужно сравнить дату/время с текущей, да еще с интервалами без NOW(). Можно конечно в запрос подставить и полученное от date().
Временная зона обычно доступна для установки через панель конфигурации сервера, то есть date_default_timezone_set(), это мера крайняя. Если нет, то в службу поддержки, они установят желаемую временную зону для сервера.
Если что, что установить временную зону sql можно: SET time_zone = 'Europe/Moscow', или скорректировать локальное время для установленной временной зоны: SET LOCAL time_zone='+hh:mm'.

Эдди 09.09.2015 18:28

Цитата:

Сообщение от laimas (Сообщение 387605)
Если не использовать функции sql, которые работают по системному времени, пожалуйста. Но трудно представить запросы, в которых нужно сравнить дату/время с текущей, да еще с интервалами без NOW(). Можно конечно в запрос подставить и полученное от date().
Временная зона обычно доступна для установки через панель конфигурации сервера, то есть date_default_timezone_set(), это мера крайняя. Если нет, то в службу поддержки, они установят желаемую временную зону для сервера.
Если что, что установить временную зону sql можно: SET time_zone = 'Europe/Moscow', или скорректировать локальное время для установленной временной зоны: SET LOCAL time_zone='+hh:mm'.

Мой провайдер (не буду называть) очень крутым себя считает и не идет ни на какие уступки. Сколько я с ними когда-то бился, чтобы позволили увеличить количество переменных в пост-массиве. Меня заверили, что ради меня любимого и моей безопасности они не будут этого делать, и что это вообще невозможно. Очень хотели, чтобы я "купил" виртуальный сервер.
А недавно я в нужную директорию в .htaccess вставил строку php_value max_input_vars 2000 и пофиг мне стал провайдер. :). А об этом они умолчали, чтобы я не пробовал, а я поверил и реально не пробовал.
Куда писать SET LOCAL time_zone='+hh:mm' ?
Все же иногда да проскользнет в MySql NOW().

laimas 09.09.2015 18:38

Цитата:

Сообщение от Эдди
Куда писать SET LOCAL time_zone='+hh:mm' ?

Запрос делать.


Часовой пояс GMT +3, время: 12:12.