Меню

Ошибка время отличается на 21600 секунд

 

Пользователь 76561

Посетитель

Сообщений: 69
Баллов: 5
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 20.11.2010

Проверка сайта

Время на БД и веб сервере: Время отличается на 3600 секунд
Ошибка возникла после перехода (или не перехода — я уже запутался)
Всё бы ничего, но рассылки ходят с задержкой на 1 час, мне это не нравится.

Рекомендации
Установил часовой пояс php в /bitrix/php_interface/dbconn.php:
date_default_timezone_set(«Europe/Moscow»);
Ничего не изменилось, да и phpinfo показывает Europe/Moscow

Попытался установить часовой пояс для базы данных в /bitrix/php_interface/after_connect.php:
$DB->Query(«SET LOCAL time_zone=’Europe/Moscow'»);

Получил две красивые строки:

DB query error.
Please try later.

убираешь из /bitrix/php_interface/after_connect.php строчку $DB->Query(«SET LOCAL time_zone=’Europe/Moscow'»);

все восстанавливается

Что сделать, чтобы время совпадало?

 

Пользователь 123039

Заглянувший

Сообщений: 1
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 05.03.2013

$DB->Query(«SET LOCAL time_zone='».date(‘P’).»‘»);

мне помогло

 

Пользователь 44828

Эксперт

Сообщений: 1132
Баллов: 198
Авторитет:

0

Рейтинг пользователя:

2

Регистрация: 01.07.2009

у меня 1 секунда и не помогает ничего — иногда правда проверка сайта говорит, что все хорошо

 

Пользователь 211624

Заглянувший

Сообщений: 2
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 18.08.2013

mne toje pomoqlo Spasibo
/bitrix/php_interface/after_connect.php
$DB->Query(«SET LOCAL time_zone='».date(‘P’).»‘» 😉 ;

 

Пользователь 173442

Заглянувший

Сообщений: 35
Баллов: 1
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 18.03.2013

#5

0

16.12.2014 01:56:13

Цитата
amica написал:
$DB->Query(«SET LOCAL time_zone='».date(‘P’).»‘»;);

мне помогло

Спасибо, отличное решение!

P.S.
Следование рекомендациям битрикса при проверке сайта и разнице во времени результатов не дало. Ну и везде итак стоит по умолчанию Europe/Moscow.

http://dermanov.ru/#bx — профессиональная разработка сайтов на Битриксе и консультации

http://dermanov.ru/hosting/ — хостинг под ключ + оптимизация скорости работы сайта. Для тех, кому надоело, что сайт тормозит.

 

Пользователь 122899

Заглянувший

Сообщений: 6
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 20.03.2012

Здесь проблема в PHP, которая не знает о новых часовых поясах.
Сам столкнулся с такой проблемой на PHP 5.4.27.
Обновил PHP до последней версии 5.4.36, которая уже знает о новых часовых поясах и проблема исчезла.

 

Пользователь 178479

Заглянувший

Сообщений: 26
Баллов: 2
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 04.04.2013

У меня похожая проблема была. Но правки в другом файле внес — after_connect_d7.php
$connection->queryExecute(«SET LOCAL time_zone='».date(‘P’).»‘»);

 

Пользователь 271478

Заглянувший

Сообщений: 1
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 22.07.2014

#8

0

01.11.2015 23:09:01

Цитата
rustam550 написал:
У меня похожая проблема была. Но правки в другом файле внес — after_connect_d7.php
$connection->queryExecute(«SET LOCAL time_zone='».date(‘P’).»‘»);

Спасибо! Мне это помогло.

 

Пользователь 35427

Заглянувший

Сообщений: 11
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 01.01.2009

В хелпе самого битрикса написано:

Установить часовой пояс php можно в /bitrix/php_interface/dbconn.php, например:
date_default_timezone_set(«Etc/GMT-3»);

Для базы данных добавьте в /bitrix/php_interface/after_connect_d7.php:
$connection = BitrixMainApplication::getConnection();
$connection->queryExecute(«SET LOCAL time_zone='».date(‘P’).»‘»);

В файл /bitrix/php_interface/after_connect.php
$DB->Query(«SET LOCAL time_zone='».date(‘P’).»‘»);

Вместо Etc/GMT-3 укажите свой часовой пояс из списка:

http://en.wikipedia.org/wiki/List_of_tz_database_time_zones

Только вот непонятно. Пробовал писать во всех конфигах и в каждом в отдельности, ничего не помогло. Видимо, этого мало.

 

Пользователь 347250

Постоянный посетитель

Сообщений: 205
Баллов: 16
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 18.12.2015

UA6EM Victor

#10

0

02.02.2016 20:11:47

Цитата
Сергей Кузнецов написал:
В хелпе самого битрикса написано:

Установить часовой пояс php можно в /bitrix/php_interface/dbconn.php, например:
date_default_timezone_set(«Etc/GMT-3»);

Для базы данных добавьте в /bitrix/php_interface/after_connect_d7.php:
$connection = BitrixMainApplication::getConnection();
$connection->queryExecute(«SET LOCAL time_zone='».date(‘P’).»‘»);

В файл /bitrix/php_interface/after_connect.php
$DB->Query(«SET LOCAL time_zone='».date(‘P’).»‘»);

Вместо Etc/GMT-3 укажите свой часовой пояс из списка:  

http://en.wikipedia.org/wiki/List_of_tz_database_time_zones

Только вот непонятно. Пробовал писать во всех конфигах и в каждом в отдельности, ничего не помогло. Видимо, этого мало.

Плохая идея и столько телодвижений!
Правильно  — установить часовой пояс в ОСИ и PHP
в php это /etc/php.ini  — строка timezone  Europe/Moscow  к примеру
в Centos 6.7 снять крыжик на — системное время UTC, когда выбираете месторасположение
по умолчанию Москва системное станет автоматом московское. (при инсталляции)
или установить. (Для виртуальной машины битрикс)

73!

 

Пользователь 35427

Заглянувший

Сообщений: 11
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 01.01.2009

#11

0

02.02.2016 20:38:35

Ну, как говорится, Битрикс большой, ему видней. Когда возникла проблема, выполнил рекомендации, данные разработчиком. Потом еще вспомнил про часовой пояс в PHP.ini, привел в соответствие и все заработало.
А по поводу оси, так у меня Битрикс на хостинге RU-CENTER висит, хорошо хоть к этим конфигам доступ есть нормальный, на другом TIMEWEB только через танцы с бубном всё делалось :-)
Спасибо за совет. Учту на будущее.

 

Пользователь 347250

Постоянный посетитель

Сообщений: 205
Баллов: 16
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 18.12.2015

UA6EM Victor

#12

0

03.02.2016 08:05:29

Цитата
Сергей Кузнецов написал:
Ну, как говорится, Битрикс большой, ему видней. Когда возникла проблема, выполнил рекомендации, данные разработчиком. Потом еще вспомнил про часовой пояс в PHP.ini, привел в соответствие и все заработало.
А по поводу оси, так у меня Битрикс на хостинге RU-CENTER висит, хорошо хоть к этим конфигам доступ есть нормальный, на другом TIMEWEB только через танцы с бубном всё делалось :-)
Спасибо за совет. Учту на будущее.

Тогда самое время на виртуальный сервер переходить )))
По цене самое оптимальное получится
Удачи!

73!

 

Пользователь 287523

Заглянувший

Сообщений: 10
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 13.10.2014

#13

0

26.07.2016 23:04:59

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

 

Пользователь 287523

Заглянувший

Сообщений: 10
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 13.10.2014

#14

0

26.07.2016 23:07:03

Цитата
Сергей Кузнецов написал:
Только вот непонятно. Пробовал писать во всех конфигах и в каждом в отдельности, ничего не помогло. Видимо, этого мало.

У меня сработало, на чистой установке на вагранте ubuntu-trusty. Специально не задавал таймзону в настройках php, все только по хелпу битрикса.

 

Пользователь 347250

Постоянный посетитель

Сообщений: 205
Баллов: 16
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 18.12.2015

UA6EM Victor

#15

0

27.07.2016 05:16:30

Цитата
ibarok_sadclown написал:
Виктор Медведев , идея не очень правильная. На сервере может работать несколько приложений, и раз уж есть возможность для каждого задать свое окружение — то лучше задать свое окружение.
Плюс, такие настройки легко кладутся под гит, в отличие от тех, что делаются в системных файлах.

неправильно когда каждому сверчку свой шесток, ну если есть желание изображать администратора, тогда да )))
правильно, когда все приложения пляшут от правильных системных настроек
Это я вам как очень-очень старый (с 1976 года) айтишник говорю )))

73!

 

Пользователь 631057

Посетитель

Сообщений: 21
Баллов: 4
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 30.06.2016

#16

0

19.06.2017 12:31:29

Сайт крутится локально в Docker контейнре Ubuntu — помогло сменить локальное системное время:

Код
ln -fs /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Не ты выбираешь Linux, а Linux выбирает тебя

 

Пользователь 4791694

Заглянувший

Сообщений: 6
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 19.11.2020

#17

0

22.11.2020 21:07:30

мне помогло в php.ini выставить date.timezone =»Europe/Moscow»
и в dbconn.php выставить date_default_timezone_set(«Europe/Moscow»);

Просмотров: 15588

Достаточно часто, при проверке параметров системы, в Битрикс, можно увидеть одну из ошибок: Время на БД и на сервере- Время отличается на 3600 секунд (цифра может быть разная, но чаще всего именно эта). Ошибка возникает, как правило, при установке веб окружения битрикс на VPS/VDS. Все из-за неправильных настроек временной зоны. Расскажу как исправить.

Провести тест, можно из административной панели битрикс, находится по пути: Администрирование-> Настройки-> Инструменты-> Проверка системы. 

Так же, данную ошибку можно увидеть в модуле обмена  с сайтом на стороне 1С. При попытке обмена вам может выдать ошибку «Авторизация не пройдена«- даже если уверены, что правильно внесли адрес сайта, логин пользователя с правом обмена и его пароль, а проверка подключения все равно не проходит- скорее всего у вас именно эта ошибка времени на БД и на веб сервере.

Есть два способа решения ошибки

Не очень правильный: Открыть на редактирование файл /bitrix/php_interface/after_connect_d7.php и внести в него строчку.


$connection->queryExecute("SET LOCAL time_zone='".date('P')."'");

После этого, чаще всего, ошибка исчезает и даже 1С проходит проверку авторизации. Но редко, бывает, что не срабатывает для 1С (хотя тест на стороне сайта покажет что все нормально). Есть правильный способ

Подключаемся к серверу по SFTP/FTP протоколу, открываем файл по пути /etc/php.ini (да, именно его, а не /etc/php.d/bitrixenv.ini). И вносим строчку


timezone =  Europe/Moscow

Перезагружаем Apache командой


service httpd restart

Все, после этого и ошибка пропадет и 1С сконнектится с сайтом.

Дополнено: Смена часового пояса на уровне системы в CentOS

Предыдуший способ менят часовой пояс на уровне php. Можно сделать совсем правильно и гарантировано работоспособно: сменить часовой пояс в самой системе CentOS

Открываем терминал и вводим команды

  • mv /etc/localtime /etc/localtime-old — бекапим файл часовых зон
  • ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime — делаем ссылку на часовую зону
  • date — убеждаемся что время правильное, выдаст текущую дату и время

PS: Само собой, если у вас 1С и сервер с сайтом работают в другом часовом поясе- выставляйте свой вместо Europe/Moscow

Поблагодарить и поддержать!

Поддержать выпуски видео уроков, поблагодарить за полезную инструкцию или заметку можно через:

Юманей

Мои каналы:

Каналы на которые я выкладываю видео. Контент дублируется, смотрите где удобнее.

Видео на Ютубе

Видео на VK

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

РЕДАКТИРОВАТЬ:

Пример: Если я использую strtotime('2011-09-19 00:00:00'), не должен ли он просто возвращать разницу между 'January 1 1970 00:00:00' и '2011-09-19 00:00:00' в секундах? Почему здесь проблема с часовым поясом? И могу ли я получить что-то, что дает разницу без проблемы с часовым поясом?

6 ответов

Лучший ответ

Вкратце: часовой пояс считается, потому что значение Unix Epoch считается в GMT.

В более широком смысле 2011-09-19 00:00:00 прибывает в Бангладеш почти через 6 часов, это 2011-09-19 00:00:00 в зоне GMT. Из-за этого промежутка прошло еще 21600 секунд в зоне GMT, когда такая же дата появляется в BD.

Поскольку расчет выполняется относительно GMT, вам нужно добавить эти 21600 секунд, чтобы получить фактическую разницу.


7

Muhammad Usman
5 Сен 2011 в 01:31

strtotime дает разные результаты в разных часовых поясах, потому что учитывает часовые пояса …

Из руководства strtotime:

Функция ожидает получить строку, содержащую английский формат даты, и попытается преобразовать этот формат в метку времени Unix (количество секунд с 1 января 1970 г. 00:00:00 по всемирному координированному времени).

Эта функция будет использовать переменную среды TZ (если она доступна) для вычисления отметки времени. Начиная с PHP 5.1.0, есть более простые способы определения часового пояса, который используется во всех функциях даты и времени. Этот процесс объясняется на странице функции date_default_timezone_get().

Взгляните на mktime().

Начиная с PHP 5.1, перед вызовом mktime или strtotime.


6

Community
20 Июн 2020 в 12:12

Из руководства PHP:

Эта функция будет использовать переменную среды TZ (если она доступна) для вычисления отметки времени. Начиная с PHP 5.1.0 есть более простые способы определения часового пояса, который используется во всех функциях даты и времени. Этот процесс объясняется на странице функции date_default_timezone_get ().

http://php.net/manual/en/function.strtotime.php


1

Christopher Armstrong
3 Сен 2011 в 23:00

Из документации PHP на strtotime:

Эта функция будет использовать переменную среды TZ (если она доступна) для вычисления отметки времени. Начиная с PHP 5.1.0 есть более простые способы определения часового пояса, который используется во всех функциях даты и времени. Этот процесс объясняется на странице функции date_default_timezone_get ().

Попробуйте установить свой часовой пояс.

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

Забавно эта функция, когда вы пытаетесь что-то вроде … эээ … например, предположим, что сегодня в этот самый момент 11 июля 2012 года в 13:00:00 (2012-07-11 13:00:00), а затем вы пытаетесь strtotime найти точно такой же момент дня, но на завтра:

$x = strtotime('2012-07-12 13:00:00');

$y = strtotime('+1 Day');

$z = $x-$y;

$ x и $ y в первых двух строках не вернут одно и то же, даже если вы проигнорируете счетчик минут и секунд, но $ z будет около 25200 или около 7 часов в разнице между этими двумя строками, если ваш сервер находится где-то в США, что GMT составляет -5 часов, но ваш браузер вызывает эту функцию из Берлина летом, где GMT ​​+2 часа … LOL, теперь вы можете понять, как php работает с этой функцией;)


0

Jason Sturges
29 Июн 2012 в 06:51

Время

При проверке соединения с сайтом 1С-Битрикс из 1С:Комплексная автоматизация, редакция 1.1 возникает ошибка:

Авторизация не выполнена. 
Не удалось установить соединение с сервером. Проверьте имя пользователя и пароль. 
Ответ сервера: failure 
Время на сервере базы данных отличается от времени на веб-сервере больше, чем на 10 минут. Вероятно неправильно настроены временные зоны. Выполните настройку и повторите обмен. 
Не удалось установить соединение.

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

1. Определим свой часовой пояс. Сделать это можно, например, здесь: http://php.net/manual/en/timezones.php

В моем случае это «Asia/Novosibirsk«.

2. Устанавливаем часовой пояс для PHP. Для этого нужно отредактировать файл /bitrix/php_interface/dbconn.php и внести в него следующее:

date_default_timezone_set(«Asia/Novosibirsk«);

3. Устанавливаем часовой пояс для MySQL в файле /bitrix/php_interface/after_connect.php: 

$DB->Query(«SET LOCAL time_zone='».date(‘P’).»‘»);

В файле /bitrix/php_interface/after_connect_d7.php: 

$connection->queryExecute(‘SET LOCAL time_zone=»‘.date(‘P’).‘»‘);

Часовой пояс будет браться из настроек PHP.

Иногда система может не содержать информацию об отмене перехода на зимнее время в РФ. В это случае можно использовать прямое указание сдвига относительно GMT, например, для Москвы будет:

date_default_timezone_set(«Etc/GMT-4»);
$DB->Query(«SET LOCAL time_zone=’Etc/GMT-4′»);

Ошибка при синхронизации Битрикс: время на сервере базы данных

Когда требуется выполнить синхронизацию с внешним источником данных (например, с 1С), то 1С Битрикс может выдать следующую ошибку: «Время на сервере базы данных отличается от времени на веб-сервере больше, чем на 10 минут». Это означает, что необходимо проверить и настроить правильные временные зоны.

Разберем эту проблему детальнее. Можно выполнить простой фикс (грабли) в виде хука в файле /bitrix/php_interface/after_connect_d7.php
указать принудительно:

$connection->queryExecute("SET LOCAL time_zone='".date('P')."'");

Но мы рекомендуем разобраться детально в причинах проблемы, для этого подключитесь к серверу по SSH и проверьте командой ‘date’ время в операционной системе (здесь и далее мы работаем в CentOS 7.

В консоли мы сначала забекапим временные файлы:

[root@sx ~]# mv /etc/localtime /etc/localtime-backup

потом делаем линк на нужную нам часовую зону:

[root@sx ~]# ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

И далее проверяем командой ‘date’ корректность нового времени.
Вот как это выглядит в терминале:

[root@sx ~]# mv /etc/localtime /etc/localtime-backup
[root@sx ~]# date
Wed Apr  8 17:19:38 UTC 2020
[root@sx ~]# ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
[root@sx ~]# date
Wed Apr  8 20:19:46 MSK 2020

Далее подключаемся в MySQL / MariaDB и проверяем тайм-зону командой:

select current_timestamp;

В консоли это выглядит так:

[root@sx ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 104506
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> select current_timestamp;
+---------------------+
| current_timestamp   |
+---------------------+
| 2020-04-08 20:24:41 |
+---------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> 

Если в MySQL / MariaDB неверное время, то выполняем следующее по определению default_time_zone: идем в /etc/my.cnf (CentOS) или /etc/mysql/my.cnf (Ubuntu) и после:

[root@sx ~] sudo /etc/init.d/mysqld restart

Сложные случаи конфликта во времени в SysConfig

Иногда так происходит, что еще одна отсылка ко времени сервера есть в:

/etc/sysconfig/clock

Вы можете поменять тайм-зону через ‘tzselect’, а в SysConfig, например, может быть прописано: ZONE=America/New_York

Это решается достаточно просто:

[root@sx ~]# vim /etc/sysconfig/clock
ZONE="Europe/Moscow"
UTC=true
ARC=false

Временные зоны в PHP

Сейчас переходим к PHP, здесь тоже может быть нюанс, поэтому смотрим: /etc/php.ini
(из него билдится уже /etc/php.d/bitrixenv.ini) в ini-файле корректируем или добавляем:

timezone =  Europe/Moscow

После изменений в php.ini нужно рестартнуть Апач:

service httpd restart

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка время отличается на 10800 секунд битрикс
  • Ошибка времени исполнения что это