#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'
В моем первоначальном запросе я конфликтовал формат даты с форматом времени