Php определить временную зону

Как определить часовой пояс посетителя на сайте?

Для начала, давайте определимся с вами, какой часовой пояс будет у ВАС на сайте, т.е. на Вашем сервере.

Это довольно важный момент, т.к. от этого в дальнейшем будут отталкиваться все временные значения, выводимые на ваш сайт и вводимые пользователем (в формы, в вашу базу данных).
Рекомендую отталкиваться от часового пояса по Гринвичу. Для чего это нужно? Для того, что с вашим сайтом могут работать люди из разных часовых поясов. И, когда вы публикуете на своем сайте новость, скажем от 25 февраля 2015 года в 05:00 утра, на сайте она и отобразиться в 5 утра. На ваших часах в этот момент то же 5 утра и вы сидите, такой, в Москве, радуетесь новому посту на своем сайте и все у вас хорошо! А товарищ из Парижа, например смотрит на ваш только что добавленный пост и ума не приложит, «КАК ПОСТ ВОЗНИК ИЗ БУДУЩЕГО, ЕСЛИ НА МОИХ ЧАСАХ ТОЛЬКО 4 УТРА. » а перед ним время публикации 05:00.

Читайте также:  Css get display height

Чтоб такой путаницы не было — логика проста:

Часовые пояса на сайте

  1. Если используете базу данных — сохранять все переменные с часовым поясом по Гринвичу, т.е. +0 GMT. Если базу не используете, то для переменных на сайте берите время по Гринвичу и.
  2. Определите временное смещение текущего пользователя на сайте, а затем.
  3. Прибавьте к вашей временной переменной (которая у вас по Гринвичу) временное смещение пользователя, учитывая его часовой пояс. И только после этого.
  4. Отображайте на сайте временные переменные (дата публикации вашего поста, текущее время на сайте, время выхода очередной бизнес-новости и т.д.) в актуальном для пользователя времени! Т.е. с учетом его часового пояса.

Таким образом у всех посетителей вашего сайта, не зависимо от того, открыли они его в Париже, в Москве или во Владивостоке, будет отображаться актуальное время для его временной зоны.

А теперь по порядку о том, как это реализовать малой кровью для вас и вашего сервера.

Указываем нашему сайту, что мы будем работать со временем по Гринвичу, нулевой UTC:

Данную функцию нужно разместить в начале сайта, до начала работы с базой данных или выводом информации на сайт.

Определяем временное смещение клиента

Есть несколько способов это сделать:

  1. Определить по IP. — Не самый корректный способ, т.к. свой IP-адрес юзер может изменить по разным причинам. Да и адреса провайдеров не всегда соответствуют действительности. Так, что это не точный метод.
  2. Попросить пользователя самостоятельно указать свой часовой пояс — не самый удобный для пользователя способ. Хотя это напрямую зависит от тематики вашего сайта. Возможно вам и нужно, чтобы пользователь, перед началом работы с вашим сайтом, указал свой город. А оттуда вы уже сможете определить его часовой пояс или временное смещение относительно времени вашего сайта, Сопоставив список городов и соответствующих им временные отклонения от Гринвича с указанным пользователем городом. Данный метод может быть точным лишь в том случае, если вы скрупулёзно подготовили базу городов и пользователь не ошибется при выборе своего города. И не забываем про перевод часов в разных странах на разные интервалы времени! :))
  3. Определить часовой пояс, установленный на устройстве пользователя (время на его системных часах). Такое под силу только Java, однако, это наиболее точный и достоверный способ определения текущей временной зоны вашего пользователя. Ведь, вряд ли пользователь будет менять часовой пояс на своем компьютере только для того, чтоб посмотреть ваш сайт. Вы же ничего секретного и запрещенного не публикуете у себя. Или публикуете?!
Читайте также:  Deprecated methods in java thread

На третьем способе мы и остановимся, т.к. он наиболее точный и учитывает перевод часов на летнее и зимнее время. А переводят время в мире не только на час, но и в некоторых странах на 30 и 15 минут. Для этого мы будем высчитывать разницу во времени в минутах.

Автоматический перевод часов на сайте

Итак, определяем текущую временную зону при помощи JavaScript

Используем функцию getTimezoneOffset() после чего вычисляем разницу в минутах между временем вашего сайта (сервера), которое у вас по Гринвичу, и временем клиента:

в переменную «a» будет занесен результат операции сложения ( . ). Если часовой пояс клиента будет больше часового пояса вашего сайта, то результат будет положительным, а если меньше, то отрицательным.
Например, часовой пояс клиента +3GMT, ваш сайт в нулевом поясе, время сайта 05:07:15. Соответственно время у клиента 05:07:15 +3 часа. Получим:
— 05:07:15 + 08:07:15 = 180 минут
т.е. в переменную «a» попадет значение 180.
Если часовой пояс у клиент -3GMT, то результат получим отрицательный:
— 05:07:15 + 02:07:15 = -180 минут
т.е. в переменную «a» попадет значение -180.

Как передать переменную из JavaScript в PHP?

Есть 2 метода: метод GET и метод POST. Рекомендую метод POST, Чтоб не нагружать ссылку разными переменными.

Наилучшее место на сайте, где это можно сделать, это форма авторизации, если она есть. Если нет — то методом GET на каждой странице сайта в начале, и обязательно с проверкой наличия этой переменной. Если данная переменная на сайт не поступила — отправить ее и обновить страницу.

Корректная авторизация на сайте работает с глобальными переменными $_SESSION. Вот туда мы и поместим нашу переменную и будем ее передавать в сессиях на те страницы, которые в ней нуждаются.

Добавляем к форме ввода логина и пароля скрытое поле input

После авторизации пользователя на сайте (нажатия кнопки «Вход», «Войти» или др.) мы получаем переменную POST[‘timezone’]. Вот ее-то мы и можем использовать по назначению.
Например, скорректировать текущую дату для клиента перед выводом ее на сайт:

Главное, понимать логику и придерживаться шагов:

  1. Назначить вашему сайту часовой пояс
  2. Определить время пользователя с учетом его часового пояса
  3. Посчитать разницу в минутах между временем вашего сайта и временем пользователя
  4. Добавить (или вычесть) эту разницу ко времени вашего сайта
  5. Показать пользователю время на сайте с учетом добавленной разницы во времени для его локации.

Вот мы и ответили на главный вопрос «Как лучше учитывать часовой пояс пользователя на сайте». Остальное зависит только от вашей фантазии))

Успехов в кодировании!

Источник

How to Detect User Timezone in PHP

Getting the user timezone can help your application in showing date and time relative to the user’s browser. This means that a user in New York will see time relative to America/New_York timezone, while a user in India will see time according to the Asia/Kolkata timezone.

Another use-case can be using the user’s timezone to create an event on his behalf with Calendar APIs such as that of Google and Outlook. The user can choose a time from the frontend, and in the backend the application creates an event at that time, using the browser’s timezone. It should be noted that all Calendar APIs need a timezone to create an event.

Detecting the User Timezone Name

Detecting the user timezoone is a two-step process:

  1. Get the timezone offset of the browser with Javascript, and sent it to PHP (via AJAX or something).
  2. Convert the timezone offset to a valid TZ Database timezone name such as America/New_York , Asia/Kolkata .

1) Getting the Browser Timezone Offset

Javascript has a getTimezoneOffset method which gives timezone difference, in minutes, from current local time to UTC. We need to pass this offset to the server.

It should be noted that getTimezoneOffset returns an offset which is positive if the local timezone is behind UTC and negative if it is ahead. So we must add an opposite sign (+ or -) to the offset.

var timezone_offset_minutes = new Date().getTimezoneOffset(); timezone_offset_minutes = timezone_offset_minutes == 0 ? 0 : -timezone_offset_minutes; // Timezone difference in minutes such as 330 or -360 or 0 console.log(timezone_offset_minutes); 

2) In PHP, Convert Timezone Offset in Minutes to a Timezone Name

You can get the timezone name from timezone offset in minutes through the timezone_name_from_abbr function.

// This is just an example. In application this will come from Javascript (via an AJAX or something) $timezone_offset_minutes = 330; // $_GET['timezone_offset_minutes'] // Convert minutes to seconds $timezone_name = timezone_name_from_abbr("", $timezone_offset_minutes*60, false); // Asia/Kolkata echo $timezone_name; 

Now when you get the timezone name, you can get date and time relative to the user’s timezone :

date_default_timezone_set($timezone_name);

Demo

Click on the button below to see the name of your current timezone :

Источник

Get Time Zone in PHP

Get Time Zone in PHP

This article will introduce the method to get the time zone in PHP.

Get Time Zone in PHP

When working on a large-scale PHP application in which users from all over the world are accessing and entering data, we need to create a time zone and set a standard date and time for all users. This is to easily convert the date and time according to users’ time zone.

There are a few built-in functions of PHP that we can use to get and set time zone. We can call this built-in PHP function to get the default time zone.

# php  echo date_default_timezone_get(); 

It will get the name of the default time zone, as shown below.

get default timezone in PHP

The default time zone is UTC from the above results, but we can easily change it using another PHP built-in function. So, let’s change our default time zone as shown below.

# php  date_default_timezone_set("Europe/Amsterdam"); echo date_default_timezone_get(); 

set default timezone in PHP

Our default time zone was set to UTC from the above example, but we changed it to Europe/Amsterdam using PHP’s built-in function.

Another built-in function in PHP is used to get the time zone of the given DateTime object. If we have a DateTime object for which we want to find the time zone, we can quickly get it using the following function.

# php  $date=date_create(null,timezone_open("Europe/Amsterdam")); $timezone=date_timezone_get($date); echo timezone_name_get($timezone); 

get timezone in PHP example

As you can see, we created a new date with the time zone Europe/Amsterdam. With the help of the built-in function of PHP, we were able to extract the time zone from that DateTime object.

Rana is a computer science graduate passionate about helping people to build and diagnose scalable web application problems and problems developers face across the full-stack.

Related Article — PHP DateTime

Источник

Оцените статью