2013-08-09 2 views
0

Я пытаюсь проверить, сколько дней прошло с момента последнего входа пользователя в систему. Я получаю последний раз, когда он вошел в столбец таблицы mysql (datetime). так что я писал:Проверьте, сколько дней прошло с момента последнего обновления в PHP

$user_last_visit = $user_info['last_updated']; // 2013-08-08 00:00:00 

$user_last_visit_str = strtotime($user_last_visit); // 1375912800 
$today = strtotime(date('j-m-y')); // 1250114400 

$diff = $today - $user_last_visit_str; 
  • Где $user_info['last_updated'] имеет последний раз, когда он \ она посетила со значением 2013-08-08 00:00:00.
  • После StrToTime я $user_last_visit_str равна 1375912800
  • $today имеет значение 9-08-13 и после того, как я получаю StrToTime 1250114400.

Некоторые причины $diff = $today - $user_last_visit_str; отрицательна вместо того, чтобы получить положительное значение с 24*60*60*1000 (один день = 24*60*60*1000 мс).

Любые идеи?

ответ

2

Простое решение с помощью diff:

echo date_create()->diff(date_create($user_last_visit))->days; 

Если все остальное терпит неудачу, просто сделать:

$diff = floor((time() - $user_last_visit_str)/(60 * 60 * 24)); 
+0

вы можете объяснить о форматах времени и почему это не сработало для меня? – yehudahs

+0

Я проверил дату и время, указанные в вашем вопросе, и это работает для меня: 'echo date_create() -> diff (date_create ('2013-08-07 00:00:00')) -> days;' печатает 2 для меня и распечатки 2013-08-08 1. Если вы используете другой формат, который не принимается этой функцией, вы можете указать формат, который вы используете, с [date_create_from_format] (http: //www.php.net/manual/en/datetime.createfromformat.php). Если вы хотите отформатировать интервал дат с дополнительной информацией, например, количеством лет, месяцев, дней, часов и т. Д., То вы можете использовать функцию date_format. – sgbj

+0

ink.attendant.6 имеет пример вышеупомянутых функций в [его ответе] (http://stackoverflow.com/questions/18140766/check-how-many-days-were-passed-since-the-last-update -в-PHP/18140952 # 18140952). – sgbj

0

попытка обратить вспять $ назначение сегодня, например, так:

$today = strtotime(date('y-m-j')); 

, который работал на меня.

+0

Почему реверсирование задания сработало? потому что $ user_last_visit = $ user_info ['last_updated']; // 2013-08-08 00:00:00 первый год? – yehudahs

1

вы можете использовать нижеследующий код, чтобы получить дату diff, здесь я дал статическую последнюю дату, которая 15 июля 2013 года, и отличается от текущей даты.

$last_date = date('y-m-d', strtotime('15th july 2013'));//here give your date as i mentioned below 
    //$last_date = date('y-m-d', strtotime($your_old_date_val)); 
$current_date = date('y-m-d');// 

echo $date_diff = strtotime($current_date) - strtotime($last_date) ; 
echo $val = 60*60*24; 
$days_diff = $date_diff/$val; 

echo $days_diff; 
1

Попробуйте это:

$user_last_visit = $user_info['last_updated']; // considering the value of user last visit is 2013-08-08 00:00:00 which indicates year, month, day, hour, minute, second respectiveliy 
$user_last_visit_str = strtotime($user_last_visit); 
$today = time(); 

$diff = $today - $user_last_visit_str; 
$no_of_days = ($diff/(60*60*24)); 
+0

необходимо добавить пол ($ diff/(60 * 60 * 24)) – yehudahs

1

Попробуйте использовать DateTime объект если ваши стили на РНР поддерживает его:

$user_last_visit = DateTime::createFromFormat('Y-m-d H:i:s', $user_info['last_updated']); 
$today = new DateTime(); 
$diff = $today->diff($user_last_visit, true); 

echo $diff->days; 

$diff будет DateInterval объект.

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