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

#php #jquery #datetime #time

#php #jquery #дата и время #время

Вопрос:

Я работаю над проектом, в котором мне нужно показать посетителю веб-сайта сообщение в области контактов, например:

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

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

P.S. — Предположим, что компания находится в Индии, и ее рабочие часы с 9.00 утра до 17.00 вечера.

Есть предложения?

Комментарии:

1. Зачем вам нужен часовой пояс пользователя, чтобы определить, находится ли он в настоящее время между 9:00 и 5:00 где-то в Индии?

2. Почему вам нужно выполнять вычисления на компьютере пользователя? Если вы делаете это на сервере, вам нужно беспокоиться только об одном часовом поясе. Кроме того, пользователь может работать без проблем с неправильно установленным часовым поясом, что означает, что браузер вычислит неправильное время для вашего часового пояса.

3. Я немного идиот в географии. Вот почему я не могу решить, сколько часовых поясов необходимо. Итак, каково вероятное решение?

4. Вам нужно только знать текущее время в местоположении офиса, чтобы знать, соответствует ли оно там рабочим часам. Не имеет значения, где пользователь находится географически. Если веб-сервер работает по местному времени для офиса, вам вообще не нужно конвертировать. Если веб-сервер использует UTC или находится в другом часовом поясе, вам просто нужно получить текущее время и преобразовать его, используя часовой пояс офиса. Сделайте это на PHP, а не на Javascript.

5. В принципе, Лхматис прав. Лучшим решением было бы проверить время на стороне сервера, используя php / asp.net или что-то еще. Только если у вас статический веб-сайт, вы должны делать это на стороне клиента с помощью javascript.

Ответ №1:

Используйте 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 /

Ответ №2:

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

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

Итак, допустим, кто-то вводит, что его часы работы с 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);
  

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