MYSQL добавляет 2 часа ко времени в базе данных при передаче эха на PHP

#php #mysql

#php #mysql

Вопрос:

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

2021-01-15 14:34:46

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

Мне нужно добавить два наших к времени из базы данных и повторить его на странице PHP

Я попробовал следующее:

 SELECT * FROM gs_objects WHERE DATE_ADD(NOW(), INTERVAL 2 HOUR) > dt_tracker 
AND imei = '358899053810647'

<td><?php echo $rows['dt_tracker']; ?></td>
 

Время остается неизменным, никаких изменений в нем не добавляется два часа

И

 SELECT CONCAT(DATE_FORMAT(dt_tracker, '%Y-%m-%d '),
              DATE_FORMAT(DATE_ADD(dt_tracker, INTERVAL 2 HOUR), '%H:%m:%s'),
              DATE_FORMAT(dt_tracker, '')) AS dt_format, 
FROM gs_objects WHERE imei = '358899053810647'

<?php echo $rows['dt_format']; ?>
 

Там вообще нет выхода

dt_tracker — это дата и время, сохраненные в базе данных, ТИП ДАННЫХ — DATETIME

Мне нужно добавить два часа к выходному времени.

2021-01-15 16:34:46

Решается с помощью следующего запроса:

 SELECT CONCAT(DATE_FORMAT(dt_tracker, '%H:%i:%s '),
              DATE_FORMAT(DATE_ADD(dt_tracker, INTERVAL 2 HOUR), '%H:%i:%s'),
              DATE_FORMAT(dt_tracker, ' %p')) AS dt_tracker, imei FROM 
gs_objects WHERE imei = '358899053064062'
 

Комментарии:

1. И в чем заключается вопрос по этому поводу? Что-нибудь не так работает, как ожидалось?

2. Извините, я увидел, что у меня была половина заявления и никаких вопросов. Сейчас я это исправил. В большинстве запросов, которые я использовал, время не изменяется и показывает время БД

3. «Мне нужно добавить» по-прежнему не является вопросом — так в чем проблема добавления времени?

4. Когда я повторяю время dt_tracker, оно не добавляет 2 часа на вывод. Для устройства отслеживания установлено значение 0 Часовой пояс, моя платформа 2 часовой пояс, поэтому вывод на эхо-сигнал должен добавить 2 часа к времени БД

5. В конце концов, первый запрос не изменяет возвращаемое значение, поскольку вы выбираете значения, которые указаны в базе данных, а не измененные. Если первый запрос возвращает строки, а второй нет, что вы пытались отладить? В конце концов, это вообще связано с PHP? Вы пробовали запускать запросы через что-то вроде phpMyAdmin, просто чтобы удалить движущиеся части проблемы?

Ответ №1:

Вы можете попробовать

 SELECT * FROM gs_objects WHERE (NOW()   INTERVAL 2 HOUR) > dt_tracker 
 

Ответ №2:

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

 SELECT *, 
    DATE_ADD(dt_tracker, INTERVAL 2 HOUR) AS dt_tracker 
FROM gs_objects ...

<td><?php echo $rows['dt_tracker']; ?></td>
 

Если вы хотите выбрать строки, в которых dt_tracker значение находится на определенном расстоянии от NOW() — это ваш второй пример, — тогда просто dt_tracker замените приведенную выше DATE_ADD формулу в WHERE предложении.

Ответ №3:

 SELECT CONCAT(DATE_FORMAT(dt_tracker, '%H:%i:%s '),
              DATE_FORMAT(DATE_ADD(dt_tracker, INTERVAL 2 HOUR), '%H:%i:%s'),
              DATE_FORMAT(dt_tracker, ' %p')) AS dt_tracker, imei FROM 
gs_objects WHERE imei = '358899053064062'
 

В моем первоначальном запросе я конфликтовал формат даты с форматом времени