Автоматическая установка временной зоны у пользователя

Функция date_default_timezone_set() – устанавливает часовой пояс, который по умолчанию используется всеми дата/время функциями.

Чтобы автоматически изменить значение часового пояса для сайта используйте следующий способ.

Как это работает:

  1. Пользователь заходит на сайт, отправляется ajax запрос на сервер с часовым поясам браузера (ajax запрос отправляются единожды).
  2. PHP скрипт обрабатывает поступившие данные и устанавливает их в сессию.
  3. Далее используется сессия для установки локали.

Файл index.php

<?php
session_start();

// Установка временной зоны.
if (empty($_SESSION['timezone'])) {
	date_default_timezone_set('Europe/Moscow');
} else {
	date_default_timezone_set($_SESSION['timezone']);
}
?>

<script src="https://yandex.st/jquery/2.1.1/jquery.min.js"></script>

<script>
	<?php if (empty($_SESSION['timezone'])): ?>
	var gmtDate = new Date();
	$.post('/timezone.php', {data: -gmtDate.getTimezoneOffset() / 60});
	<?php endif; ?>
</script>
PHP

Файл timezone.php

session_start();
$data = (isset($_POST['data'])) ? $_POST['data'] : '3';
switch ($data) {
	case '-11':  $_SESSION['timezone'] = 'Pacific/Apia'; break;
	case '-10':  $_SESSION['timezone'] = 'Pacific/Honolulu'; break;
	case '-9':   $_SESSION['timezone'] = 'America/Anchorage'; break;
	case '-8':   $_SESSION['timezone'] = 'America/Los_Angeles'; break;
	case '-7':   $_SESSION['timezone'] = 'America/Denver'; break;
	case '-6':   $_SESSION['timezone'] = 'America/Chicago'; break;
	case '-5':   $_SESSION['timezone'] = 'America/New_York'; break;
	case '-4':   $_SESSION['timezone'] = 'America/Santiago'; break;
	case '-3':   $_SESSION['timezone'] = 'America/Godthab'; break;
	case '-2':   $_SESSION['timezone'] = 'America/Noronha'; break;
	case '-1':   $_SESSION['timezone'] = 'Atlantic/Azores'; break;
	case '0':    $_SESSION['timezone'] = 'Europe/London'; break;
	case '1':    $_SESSION['timezone'] = 'Europe/Paris'; break;
	case '2':    $_SESSION['timezone'] = 'Europe/Minsk'; break;
	case '3':    $_SESSION['timezone'] = 'Europe/Moscow'; break;
	case '3.3':  $_SESSION['timezone'] = 'Asia/Tehran'; break;
	case '4':    $_SESSION['timezone'] = 'Asia/Tbilisi'; break;
	case '4.3':  $_SESSION['timezone'] = 'Asia/Kabul'; break;
	case '5':    $_SESSION['timezone'] = 'Asia/Yekaterinburg'; break;
	case '5.3':  $_SESSION['timezone'] = 'Asia/Calcutta'; break;
	case '5.45': $_SESSION['timezone'] = 'Asia/Katmandu'; break;
	case '6':    $_SESSION['timezone'] = 'Asia/Novosibirsk'; break;
	case '6.3':  $_SESSION['timezone'] = 'Asia/Rangoon'; break;
	case '7':    $_SESSION['timezone'] = 'Asia/Krasnoyarsk'; break;
	case '8':    $_SESSION['timezone'] = 'Asia/Irkutsk'; break;
	case '9':    $_SESSION['timezone'] = 'Asia/Yakutsk'; break;
	case '9.3':  $_SESSION['timezone'] = 'Australia/Darwin'; break;
	case '10':   $_SESSION['timezone'] = 'Asia/Vladivostok'; break;
	case '11':   $_SESSION['timezone'] = 'Asia/Magadan'; break;
	case '12':   $_SESSION['timezone'] = 'Pacific/Auckland'; break;
	case '13':   $_SESSION['timezone'] = 'Pacific/Tongatapu'; break;
	default:     $_SESSION['timezone'] = 'Europe/Moscow'; break; 
}
PHP
05.10.2016, обновлено 30.08.2019 1062

Поделится

Темы

AJAX

Другие публикации

Примеры как зарегистрировать бота в Телеграм, описание и взаимодействие с основными методами API.
AJAX позволяет отправить и получить данные без перезагрузки страницы. Например, делать проверку форм, подгружать...
Пример создания файла карты сайта (sitemap.xml) на PHP. Интеграция его на сайт и подключение его в robots.txt
date($format, $timestamp) – форматирует дату/время по шаблону, где...
Если на сайте используется виджет комментариев VK, то со временем возникает потребность вывода количества комментариев...