$time = date('Y-m-d H:i:s');
$db->query("INSERT INTO `data`(`time`) VALUES ('$time')");
$data = $db->query("SELECT UNIX_TIMESTAMP(`time`) FROM `data`")->fetch_column();
echo time() - $date; // В результате 18000 + прошедшие секунды
PHP
Откуда берутся 18000 секунд PHP?
Записываю в базу date, потом достаю значение в секундах из базы с помощью UNIX_TIMESTAMP отнимаю от time() и откуда то появляются лишние 18000
Проблема, из-за которой вы получаете лишние 18000 секунд, связана с разницей в часовых поясах.
UNIX_TIMESTAMP возвращает время в формате UTC (Универсальное координированное время), которое не учитывает часовой пояс вашего сервера или ваше текущее местное время. Вероятно, разница в 18000 секунд (5 часов) происходит из-за того, что ваш сервер настроен на другой часовой пояс.
Чтобы решить эту проблему, вам нужно учесть разницу в часовых поясах между вашим сервером и вашим местным временем при вычислении разницы во времени.
Примерный код, который может помочь вам получить правильную разницу в секундах:
Copy code
// Получение текущего местного времени
$localTime = time();
// Получение времени из базы данных в формате UTC
$dbTime = $data[0];
// Получение разницы в часах между сервером и местным временем
$timeZoneOffset = date('Z') / 3600; // Разница в секундах, деленная на 3600 для получения часов
// Вычисление разницы в секундах
$timeDifference = $localTime - $dbTime - ($timeZoneOffset * 3600);
echo $timeDifference;
В этом коде мы вычитаем разницу в часах между сервером и местным временем, умноженную на 3600, чтобы преобразовать разницу в секунды.
Убедитесь также, что ваш сервер настроен на правильный часовой пояс. Если сервер работает на Linux, вы можете настроить часовой пояс в файле php.ini или использовать функцию date_default_timezone_set() в PHP для установки нужного часового пояса в вашем скрипте.
UNIX_TIMESTAMP возвращает время в формате UTC (Универсальное координированное время), которое не учитывает часовой пояс вашего сервера или ваше текущее местное время. Вероятно, разница в 18000 секунд (5 часов) происходит из-за того, что ваш сервер настроен на другой часовой пояс.
Чтобы решить эту проблему, вам нужно учесть разницу в часовых поясах между вашим сервером и вашим местным временем при вычислении разницы во времени.
Примерный код, который может помочь вам получить правильную разницу в секундах:
Copy code
// Получение текущего местного времени
$localTime = time();
// Получение времени из базы данных в формате UTC
$dbTime = $data[0];
// Получение разницы в часах между сервером и местным временем
$timeZoneOffset = date('Z') / 3600; // Разница в секундах, деленная на 3600 для получения часов
// Вычисление разницы в секундах
$timeDifference = $localTime - $dbTime - ($timeZoneOffset * 3600);
echo $timeDifference;
В этом коде мы вычитаем разницу в часах между сервером и местным временем, умноженную на 3600, чтобы преобразовать разницу в секунды.
Убедитесь также, что ваш сервер настроен на правильный часовой пояс. Если сервер работает на Linux, вы можете настроить часовой пояс в файле php.ini или использовать функцию date_default_timezone_set() в PHP для установки нужного часового пояса в вашем скрипте.
У тебя часовые пояса на сервере, в PHP и в MySQL как настроены?
+5 - это больше привычных московских +3.
Есть функция https://www.php.net/manual/ru/function.gmdate.php - которая как раз по Гринвичу форматирует.
+5 - это больше привычных московских +3.
Есть функция https://www.php.net/manual/ru/function.gmdate.php - которая как раз по Гринвичу форматирует.
date() - локальное время
time() - GMT
time() - GMT
Дмитрий Болоткин
А можно превратить date() в GMT?
Эта проблема может быть связана с разницей в часовых поясах, которую использует PHP и ваша база данных. UNIX_TIMESTAMP в MySQL возвращает время в секундах, начиная с '1970-01-01 00:00:00' UTC, а функция `time()` в PHP возвращает текущее время также в секундах начиная с '1970-01-01 00:00:00' UTC.
Однако, функция `date('Y-m-d H:i:s')` в PHP возвращает текущее время в локальном часовом поясе, который задан в настройках PHP.
То есть, если ваша база данных работает в часовом поясе UTC, а PHP использует другой часовой пояс, отличный от UTC на 5 часов, то разница будет составлять 18000 секунд (5 часов * 60 минут * 60 секунд).
Для решения этой проблемы, вы можете:
1. Установить один и тот же часовой пояс для PHP и MySQL.
2. Использовать функцию `gmdate('Y-m-d H:i:s')` вместо `date('Y-m-d H:i:s')` в PHP. Функция `gmdate()` возвращает время в часовом поясе UTC.
Однако, функция `date('Y-m-d H:i:s')` в PHP возвращает текущее время в локальном часовом поясе, который задан в настройках PHP.
То есть, если ваша база данных работает в часовом поясе UTC, а PHP использует другой часовой пояс, отличный от UTC на 5 часов, то разница будет составлять 18000 секунд (5 часов * 60 минут * 60 секунд).
Для решения этой проблемы, вы можете:
1. Установить один и тот же часовой пояс для PHP и MySQL.
2. Использовать функцию `gmdate('Y-m-d H:i:s')` вместо `date('Y-m-d H:i:s')` в PHP. Функция `gmdate()` возвращает время в часовом поясе UTC.
Не уверен
$time - это строка, а поле time может быть не строковое?
Лучше $time преобразовать в секунды и потом вставлять в таблицу
$time - это строка, а поле time может быть не строковое?
Лучше $time преобразовать в секунды и потом вставлять в таблицу
Дмитрий Болоткин
Нет, кажется уже нашёл, date делает время установленное в бд
Похожие вопросы
- PHP Polling ChatGPT
- Как оптимизировать структуру сайта php. на готовом шаблоне
- Не работает PHP include на хостинге
- Как в PHP сделать так чтобы по истечению 30 секунд происходило какое то действие?
- Хеширование пароля php
- Подскажите хороший курс по PHP практике?
- Пишу авторизацию (php). Куки не работают
- Вопрос начинающего программиста Python\PHP
- Как в PHP указать тип переменной unsigned int?
- какой функционал делают на сайтах с помощью php? вообще не пойму что конкретно пишут на этом языке на сайтах..
date() - локальное время
time() - GMT
Можно превратить date() в GMT?