Контакт с сервером PHP и сервером MySQL в различных часовых поясах

Обычно это аннотация потока потока, и в этом случае означает, что setup() возвращает React.Component. Или это может быть TypeScript, но не может сделать сложное предположение в этом конкретном случае.

11
задан Nitesh 30 April 2012 в 11:30
поделиться

4 ответа

С PHP 5.1.0 можно использовать date_default_timezone_set () функция для установки часового пояса по умолчанию, используемого всеми функциями даты/времени в сценарии.

Для MySql (заключенный в кавычки из Страницы поддержки MySQL Server Time Zone)

Перед MySQL 4.1.3 сервер работает только в наборе зоны системного времени при запуске. Начинаясь с MySQL 4.1.3, сервер поддерживает несколько установок часового пояса, некоторые из которых могут быть изменены во времени выполнения.

Из интереса для Вас установка для каждого подключения часовых поясов, которые Вы использовали бы в начале своих сценариев

SET timezone = 'Europe/London';

Что касается обнаружения клиентской установки часового пояса, Вы могли использовать немного JavaScript, чтобы получить и сохранить ту информацию к cookie, и использовать его на последующих чтениях страницы, вычислить надлежащий часовой пояс.

//Returns the offset (time difference) between Greenwich Mean Time (GMT) 
//and local time of Date object, in minutes.
var offset = new Date().getTimezoneOffset(); 
document.cookie = 'timezoneOffset=' + escape(offset);

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

17
ответ дан 3 December 2019 в 02:42
поделиться

Я сохраняю все свои даты как bigint должное к тому, что имел проблемы с типом даты и времени прежде. Я сохраняю результат времени () функция PHP в него, теперь они рассчитывают как являющийся в том же часовом поясе :)

0
ответ дан 3 December 2019 в 02:42
поделиться

Сохраните все как UTC. Можно сделать преобразования на клиентском уровне, или на стороне сервера с помощью клиентских настроек.

php - дата

mysql - метка времени UTC

11
ответ дан 3 December 2019 в 02:42
поделиться

RE ответ от Желько Живковича, дескрипторы временных зон типа 'Europe/London' работают только в том случае, если администратор mySQL добавил таблицы временных зон в систему и поддерживает их в актуальном состоянии.

В противном случае вы ограничены числовыми смещениями типа "-4:00". К счастью, формат php date('P') обеспечивает это (начиная с версии 5.1.3)

Поэтому в конфигурационном файле приложения вы можете иметь

define('TZ', 'US/Pacific');
....
if (defined('TZ') && function_exists('date_default_timezone_set')) {
    date_default_timezone_set(TZ);
    $mdb2->exec("SET SESSION time_zone = " . $mdb2->quote(date('P')));
}

Это означает, что PHP и mySQL согласуют, какое смещение часового пояса использовать.

Всегда используйте TIMESTAMP для хранения значений времени. Колонка фактически хранится как UNIX_TIME (эпоха), но неявно конвертируется из текущего смещения временной зоны при записи и обратно при чтении.

Если вы хотите отображать время для пользователей в других часовых поясах, то вместо глобального define() задайте их часовой пояс в вышеприведенном примере. Значения TIMESTAMP будут автоматически преобразованы mySQL к тому времени, когда ваше приложение увидит набор результатов (что иногда может быть проблемой, если вам нужно знать исходный часовой пояс события, то он должен быть в другой колонке)

Что касается "почему бы просто не хранить все времена как int", это лишает вас возможности сравнивать и проверять даты, и означает, что вы всегда должны конвертировать в представление даты на уровне приложения (и это тяжело для глаз, когда вы смотрите на данные напрямую - быстро, что случилось в 1254369600? )

3
ответ дан 3 December 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: