Показать сообщение отдельно
  #10 (permalink)  
Старый 23.04.2015, 11:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Письмо админу высылается с телефоном и именем клиента.
Вы заказываете звонок в нерабочее время, мы перезвоним вам с 10:00 до 19:00 по Москве

А где в письме указано что надо звонить пусть с 10:00?

Нужно не мудрить, а думать.
Для примера пусть сервер находится в Екатеринбурге (для примера только нашу страну берем).

Те кто западнее сервера в рабочее время 8:00 сервера еще спят, а те что восточнее давно проснулись. Откуда администратор будет знать, что звоня в 8:00 или даже 10:00 по местному времени он не подымет с постели клиента?

Я вам показывал как это нужно делать - считать на севере, запоминать его (ну или в письме отправлять), а клиенту в ответе сообщать результат. Если нужно рассчитать время только относительно начала работы, то:

1) заказ на звонок отправляет скрытым полем и смещение временной зоны клиента - (new Date()).getTimezoneOffset()/60, пусть будет в часах, хотя это будет неудобно, так как есть смещения и в 30 минут, и часов:минут. Но для простоты понятия пусть так.

2) смещение временной зоны клиента, это отрицательное к востоку и положительное к западу от Гринвича значение. РНР же наоборот возвращает к востоку положительные а к западу отрицательные значения.
Жителей по московскому их клиент вернет -3, а сервер 3 (date('Z')/60/60 также получаем в часах). Разница смещений для клиента и сервера при этом будет равна - (date('Z')/60/60) + $z = 3 + (-3) = 0.
Для клиента восточнее Москвы, например -5, будет 3 + (-5) = -2,
а для западнее Москвы, например -1, будет 3 + (-1) = 2.
Зная, что для жителей московского часового пояса разница смещений равна 0, несложно понять, что если разница больше 0, то это клиент западнее Москвы, и ему нужно звонить по московскому времени не в 9 часов, а в 9 + 2 = 11, так как в 9 по Москве у них будет только 7, и он еще может спать. А для сообщения этому клиенту отправляем, что позвоним начиная с 9 утра местного времени.
Если разница смещений меньше нуля, то это восточный клиент и он уже проснулся, и можно звонить по московскому времени начиная с 9, а ему сообщаем, что будем звонить начиная с 9 + 2 = 11 по местному времени.
Для западных окончание периода звонка для сервера равно 18 часов, а сообщаем клиенту 18 - 2 = 16 о местном времени.
Для восточных сервер должен позвонить также до 18 часов, но у клиента местное время будет 18 + 2 = 20. Это время и нужно проверить более ли оно 21 часов.

В общем простая арифметика, без всяких сложностей.
Ответить с цитированием