Сравните часовой пояс пользователя с часовым поясом офиса сайта.

Я работаю над проектом, в котором мне нужно ПОКАЗАТЬ посетителю сайта сообщение в области контактов, например:

Контактный номер: +91-99-3241-5285 [You can call us now]

Сообщение выделено в строке выше, теперь у меня вопрос, как сопоставить часовой пояс пользователя с временем работы офиса компании.

P.S. – Предположим, компания находится в ИНДИИ и работает с 9:00 до 17:00.

Какие-либо предложения?


person Sujit Agarwal    schedule 30.05.2011    source источник
comment
Зачем вам нужен часовой пояс пользователя, чтобы определить, находится ли он сейчас между 9:00 и 17:00 где-то в Индии?   -  person Joe Holloway    schedule 30.05.2011
comment
Зачем нужно делать расчет на машине пользователя? Если вы делаете это на сервере, вам нужно беспокоиться только об одном часовом поясе. Кроме того, пользователь может работать с неправильным часовым поясом, что означает, что браузер вычислит неправильное время для вашего часового пояса.   -  person LHMathies    schedule 30.05.2011
comment
Я немного идиот в географии. Вот почему я не могу решить, сколько часовых поясов нужно. Итак, каково вероятное решение?   -  person Sujit Agarwal    schedule 30.05.2011
comment
Вам нужно только знать текущее время в офисе, чтобы знать, находится ли оно в пределах рабочего времени. Не имеет значения, где пользователь находится географически. Если веб-сервер работает по местному для офиса времени, конвертировать вообще не нужно. Если веб-сервер использует UTC или другой часовой пояс, вам просто нужно получить текущее время и преобразовать его, используя часовой пояс офиса. Делайте это на PHP, а не на Javascript.   -  person Joe Holloway    schedule 30.05.2011
comment
В принципе, LHMathies прав. Лучшим решением будет проверка времени на стороне сервера, с помощью php/asp.net или чего угодно. Только если у вас есть статический веб-сайт, вы должны сделать это на стороне клиента с помощью javascript.   -  person roberkules    schedule 30.05.2011


Ответы (2)


Используйте javascript для определения смещения часового пояса пользователей:

http://www.w3schools.com/jsref/jsref_gettimezoneoffset.asp

var d = new Date()
var gmtHours = -d.getTimezoneOffset()/60;
document.write("The local time zone is: GMT " + gmtHours);

Затем вычислить, например. текущее время в ИНДИИ (GMT + 5:30, если я не ошибаюсь) и показать «вы можете позвонить нам сейчас», если полученное время находится в пределах рабочего времени.

var diff = gmtHours - 5.5; // -> difference between users timezone and india in hours
var indiaDate = new Date();
indiaDate.setTime(d.getTime() - (diff * 60 * 60 * 1000));
document.write("<br />Current time in India: " + indiaDate.toString());

См. рабочую демонстрацию по адресу: http://jsfiddle.net/roberkules/RLsw9/.

person roberkules    schedule 30.05.2011

Ответы сразу под вашим вопросом верны. Не должно быть необходимости знать часовой пояс клиента, чтобы вычислить, находится ли текущее время в пределах часов работы. На самом деле не имеет значения, сейчас 8:00 по тихоокеанскому времени в США, 11:00 по восточному поясу США или 23:00 по Маниле, Филиппины. Важно то, какое время относится к часам работы, а не к клиенту.

Обычно на всех веб-серверах, которые я запускаю, я устанавливаю время сервера в формате UTC. Когда люди вводят свои часы, либо попросите их ввести их по Гринвичу, либо, если вы хотите, чтобы они могли вводить часы в своем местном времени, разместите на странице список часовых поясов или поле со списком. Вы можете использовать функцию PHP DateTimeZone::listAbbreviations(), чтобы помочь.

Так, например, скажем, кто-то вводит, что его часы с 9:00 до 17:00 в часовом поясе Азии/Калькутты. Когда вы используете время для вычислений, сделайте что-то вроде этого, предполагая, что у вас есть строки с именами вроде hrs_start, hrs_end и hrs_tz:

$hrs_tz = new DateTimeZone($row['hrs_tz']);
$hrs_start = new DateTime($row['hrs_start'], $hrs_tz);
$hrs_end = new DateTime($row['hrs_end'], $hrs_tz);

Теперь вы можете использовать эти часы, чтобы рассчитать, являются ли часы рабочими или нерабочими.

person King Skippus    schedule 30.05.2011