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

Функция 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="/jquery.min.js"></script>

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

Файл timezone.php

<?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, обновлено 20.02.2021
3990

Комментарии

, чтобы добавить комментарий.

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

Загрузка изображений с превью AJAX + PHP + MySQL
В данной статье представлена упрощенная реализация загрузки изображений с превью через AJAX с сохранением в базу данных...
19543
+19
Установка локали UTF-8 в PHP
В любом PHP приложении нужно настраивать локаль и кодировку вне зависимости от настроек сервера.
8697
+3
Local Storage и Session Storage в JavaScript
Web Storage API это набор методов, при помощи которых в браузере можно хранить данные в виде пар ключ=значение на...
9930
+4
Примеры отправки AJAX JQuery
AJAX позволяет отправить и получить данные без перезагрузки страницы. Например, делать проверку форм, подгружать контент и т.д. А функции JQuery значительно упрощают работу.
200508
+28
PHP класс для отправки E-mail
Отправка писем в кодировке UTF-8 и формате HTML, вложение файлов, дамп писем на сервере в файле eml.
13144
+2
Описание мета-тегов
В статье представлены все самые встречающеюся мета-теги с примерами и пояснениями их использования.
17234
+4