2015-12-20 7 views
1

Я сохраняю время входа для php. это то, что я использую, чтобы сохранить значение на каждый входPHP: Установка часового пояса для даты

$update= mysqli_query($connection, "UPDATE employees set loggedin= now() WHERE email = '$email'");  

, когда я получаю значение от

$logintime_query= mysqli_fetc h_assoc($logintime); 
    $loggedin_time_converted= explode(" ",$logintime_query) ;  

    $converted_time= $loggedin_time_converted['0']; 
    $converted_date= $loggedin_time_converted['1']; 

теперь я сравнить эту дату с сегодняшним днем, чтобы получить текущую дату я использую это

$today= $_SERVER['REQUEST_TIME']; 
echo(date("Y-m-d",$today)); 

Теперь проблема заключается в том, что $_SERVER['REQUEST_TIME] дает мне эту дату

2015-12-21 

и когда я вписываю дату, используя NOW() и извлечь его из БД это то, что я получаю

2015-12-20 

это вопрос времени зоны или что? мой часовой пояс UTC + 4 (Дубай), поэтому я попытался установить его как этот

date_default_timezone_set('Asia/Dubai'); 

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

+1

база данных и php-код находятся на одном сервере? Пожалуйста, убедитесь, что это –

+0

Извините, но ваш PHP-код, который вы утверждаете, использует только привычную работу. Вы можете проверить это, 'mysqli_fetch_assoc()' возвращает массив, и вы пытаетесь взорвать его, как будто это была строка. Кроме того, когда вы взорваетесь в поле datetime, например '2015-12-20 10: 11: 12', дата будет в состоянии« [0] »и время в оккуссии' [1] ' – RiggsFolly

ответ

0

Я предлагаю вам использовать time() функцию только. См. here.

Если вы установили date_default_timezone_set('Asia/Dubai'); перед использованием time() Он должен работать.

не проверено.

0

Должно быть, проблема с часовым поясом, да. Каков часовой пояс вашего сервера mysql?

Вы можете глобально изменить его с

default_time_zone='+04:00' 

в разделе туздЫ вашего туздЫ.

Или со следующим заявлением SQL:

SET @@global.time_zone='+04:00'; 

Также следует знать, что $ _SERVER [ 'request_time] время веб-сервер начал обрабатывать запрос. Использование функции date() php должно быть более точным.

1

Временные интервалы сложны и беспорядочны. Например, здесь ваша проблема связана не только с настройкой часового пояса PHP, но и с часовым поясом MySQL, так как вы храните там временные метки и пытаетесь использовать их снова в PHP.

Введите Unix тайминг транспорта

Чем лучше и более эффективный способ транспортировать все эти временные метки вокруг так, что вам не придется беспокоиться о преобразованиях часовых поясов при переходе из MySQL в PHP или PHP в MySQL или PHP на Javascript или Javascript на PHP, просто использовать временные метки Unix везде, где нужно транспортировать время.

$logintime = mysqli_query("SELECT UNIX_TIMESTAMP(loggedin) as loggedin FROM employees WHERE email = '[email protected]'"); 

Теперь, когда вы хотите сравнить это на PHP, вы просто ...

if ($logintime['loggedin'] > time()) { 
    /* ... do stuff ... */ 
} 

Чтобы перейти от PHP обратно в MySQL так же просто ...

$t = time(); 
$logintime = mysqli_query("UPDATE employees SET loggedin = FROM_UNIXTIMESTAMP($t) WHERE email = '[email protected]'"); 

Это гораздо удобнее, чем беспокоясь о нас ли вы правильно установленных часовых поясов в разных местах и ​​надеемся, что вы не совершили простую ошибку где-то по пути, который позже испортит ваши результаты.

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