2014-01-04 6 views
1

Я сделал это в PHP для хранения lastlogin в MySQL даты и времени колонкеPHP и дата MySQL разница во времени

date('Y-m-d 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-минутные пользователи.

Как это исправить?

EDIT

Я вставил запись вручную в PhpMyAdmin, чтобы быть уверенным, whthear его часовой пояс проблема в timestamp колонке со значением по умолчанию current_timestamp, он дал 2014-01-05 06:48:21. Я СРД этот запрос в PhpMyAdmin

SELECT created, NOW() `elc_users` 

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

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

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

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

+4

Возможно, ваш сервер mysql имеет другой часовой пояс. –

+0

Это на моей машине dev, хорошо, как я могу избежать этой разницы в часовом поясе – Smith

+0

@ FilipGórny PLS посмотреть на редактирование – Smith

ответ

0

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

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

Спасибо всем, кто способствовал, это не проблема, как часовой пояс @AbdulJabbarWebBestow снова

упоминается

Спасибо

1

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

date_default_timezone_set('America/Los_Angeles'); 
+0

как я могу обнаружить это на производственном сервере? Или если я установлю это в php, это повлияет на mysql – Smith

+0

'select timediff (now(), convert_tz (now(), @@ session.time_zone, '+ 00:00'));' должен вернуть часовой пояс mysql для вас –

+0

Другой «хакерский» способ - использовать php-дату в вашем запросе, а не mysql NOW() –

1

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

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

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

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

+1 для проблемы с часовым поясом, поскольку PHP и MySQL работают на одном компьютере. Я не знаю о запросе, но я столкнулся с чем-то вроде этого, и как @Abdul Jabbar WebBestow сказал, что это не разница в часовом поясе в PHP и MySQL –

+0

@JohnSmith благодарит, и вы можете проверить запрос, выбрав date_add (NOW(), INTERVAL - 20 MINUTE), так как он даст вам -20 минут от вашего текущего времени и, следовательно, означает, что он даст те записи, которые регистрируются за последние 20 минут. –

+0

, которые вошли в систему более 20 минут –

Смежные вопросы