Перейти к содержимому
Русский язык для Invision Community 5

Часовой пояс и php

Здравствуйте. 

Подскажите, как сравнять часовой пояс форума и сервера?

из коробки в init.php стоит настройка

		/* Set timezone */
		date_default_timezone_set( 'UTC' );

При этом на форуме время правильное, но если в каком либо блоке написать 

echo date("H:i", time());

то время будет отставать на 3 часа

Если в эту переменную вставить 

date_default_timezone_set( 'Europe/Moscow' );

то время на форуме будет спешить на 3 часа, а time() будет впорядке.

Как сравнять время форума и time() ?

 

 

Рекомендованные сообщения

  • Автор

При этом, при установке часового пояса Москва в титле время правильное, а в общем - спешит

image.png.855f77c394ebb6c2858478d46b38c33c.png

Надо использовать не нативные функции, а класс форума \IPS\DateTime.

  • 4 года спустя...

Также перелопатил кучу инфы, но так и не смог разобраться. Понятно, что этот код виновен в отставании времени по Москве :)

/* Set timezone */
		date_default_timezone_set( 'UTC' );

Возможно siv1987 уже дал ответ и все всё поняли, но не я :) Куда и как использовать этот класс \IPS\DateTime.

40 минут назад, ovi8 сказал:

Также перелопатил кучу инфы, но так и не смог разобраться. Понятно, что этот код виновен в отставании времени по Москве :)

/* Set timezone */date_default_timezone_set( 'UTC' );

Возможно siv1987 уже дал ответ и все всё поняли, но не я :) Куда и как использовать этот класс \IPS\DateTime.

Нужно менять в настройках php. Посмотрите этот ответ, один из вариантов настройки https://ipbskins.ru/forums/topic/16688-chasovoy-poyas/#findComment-111046

Если "Europe/Moscow" ставишь, то время начинает спешить на те же 3 часа. Я так понял, здесь что-то похоже на объяснение - https://ipbskins.ru/forums/topic/14762-na-forume-php-funktsiya-time-otstayot-na-3-chasa/#findComment-100527

При обновлении страницы, то всё ОК время возвращается правильно, такая проблема только при первом заходе. И с этим можно было бы жить, но в приложении "Календарь" если событие попадает на 1 число месяца и начинается в период 00 до 2:59 ночи оно не отображается, эх.

Ну и в этой же теме есть решение от Сайрекса, только я не знаю куда его ставить и надо ли его ставить, так как там речь о тройке, а у меня сейчас 4 версия форума, хотя разницы не должно быть наверное.

if(($currentTimeZone = date_default_timezone_get()) != ini_get('date.timezone')) {
   date_default_timezone_set(ini_get('date.timezone'));
}
$date = date('Y-m-d H:i:s', $time());
if($currentTimeZone != date_default_timezone_get()) { date_default_timezone_set($currentTimeZone); }

Изменено пользователем ovi8

39 минут назад, ovi8 сказал:

И с этим можно было бы жить, но в приложении "Календарь" если событие попадает на 1 число месяца и начинается в период 00 до 2:59 ночи оно не отображается, эх.

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

Отписался в теме на форуме разработчиков, данная проблема как в IPS4, так и в IC5.

События на границе месяца не попадают в выборку, если они созданы с отличной от UTC временной зоной и дата и время начала события начинается с 1 числа месяца, а время начала входит в диапазон смещения от UTC. Особенно это заметно когда событие начинается в 7 утра 1 числа месяца в зоне UTC+8.

Для IPS 4 в файле applications/calendar/sources/Event/Event.php

Найти:

$startDateTimezone  = \IPS\calendar\Date::parseTime( $startDate->mysqlDatetime(), TRUE );

Заменить на:

$startDateTimezone  = \IPS\calendar\Date::parseTime( $startDate->mysqlDatetime() );

Здоров, это помогло! На форумах точно такая же проблема присутствует хотя она там не так критична. Если не заходить на сайт какое-то время, то при первом заходе (наверняка кэш обновляется) пост также отстает на 3 часа, после любого действия на странице время приходит в норму. Всё это звенья одной цепи с пользовательским отображением времени...

13-52.png

16-52.png

Изменено пользователем ovi8

4 часа назад, ovi8 сказал:

На форумах точно такая же проблема присутствует хотя она там не так критична.

Зафиксирую пока здесь, позже посмотрю

Первый заход

image.png

После обновления страницы

image.png

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.