разность дат времени в php и mysql

Я сделал это в php, чтобы сохранить lastlogin в столбце datetime mysql

date('Ymd h:i:s') //which then gave > '2014-01-04 08:00:56' 

и затем сохранили его

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

 SELECT * FROM `elc_users` WHERE TIMESTAMPDIFF( MINUTE , lastlogin, NOW( ) ) <20 

это не сработало, когда я проследил в mysql, Now() дал это> 2014-01-04 20:00:56

Теперь это не позволит мне получить мои 20 минут зарегистрированных пользователей.

Как я могу это исправить?

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

Я вставил запись вручную в phpMyAdmin, чтобы убедиться, что проблема с часовым поясом в столбце timestamp со значением по умолчанию current_timestamp , он дал 2014-01-05 06:48:21 . Я выполнил этот запрос в phpMyAdmin

 SELECT created, NOW( ) `elc_users` 

это дало 2014-01-05 18:53:53

Теперь я также выполняю код ниже, чтобы проверить глобальный и сеансовый часовые пояса, и я получил phpMyAdmin

 mysql> SELECT @@global.time_zone, @@session.time_zone; 

который затем дал SYSTEM | SYSTEM SYSTEM | SYSTEM

Как сказал Филип, это, вероятно, проблема с часовым поясом; вы можете изменить часовой пояс своего скрипта на любой часовой пояс, на который настроен ваш MySQL:

 date_default_timezone_set('America/Los_Angeles'); 

Чтобы избежать таких проблем, проверьте следующее.

  1. Убедитесь, что system time и system timezone как сервера БД, так и сервера приложений одинаковы.
  2. Убедитесь, что вы настроили конфигурацию PHP и MySQL на правильные временные зоны.
  3. Всегда используйте одну функцию для установки обновления, вставляйте строки, в которых есть поле dateTime . Лично я предлагаю вам написать общую функцию где-то в вашем коде, и всякий раз, когда вам нужно получить текущее время, используйте эту функцию вместо использования NOW()

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

 SELECT * FROM `elc_users` WHERE lastlogin < date_add(NOW(), INTERVAL -20 MINUTE) 

Я решил проблему, удалив столбец даты и создав ее снова. теперь это записано в правильном формате

timestamp дал 2014-01-04 20:58:56 и NOW() дал 2014-01-04 20:58:56

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

еще раз спасибо