user2230442
user2230442

Reputation: 13

Comparing DateTime?

I've been doing a good amount of research with this, and used a few codes to get to know how to make this work, but nothing has worked the way I wanted it to, or hasn't worked at all.

The code is:

<?php
$time1 = $user['last_active'];
$time2 = "+5 minutes";
   if (strtotime($time1) > strtotime($time2)) {
      echo "Online!";
   }else{
      echo "Offline!";  
   }
?>

It is supposed to compare the two variables, and find out if the last active variable is greater or less than 5 minutes, and if it is greater, appear offline. I do not know what's wrong as the NOW() updates on each page and stops if the user is not logged in. Any suggestions or help? Thanks.

The $time1 variable is coming from a fetched array that gets the ['last_active'] information that updates on each page.

I fixed my code, but it still doesn't work right, however, I think I have managed to get further than I was..

<?php
$first  = new DateTime();
$second = new DateTime($user['last_active']);
$diff = $first->diff( $second );
$diff->format( '%H:%I:%S' );
if($diff->format( '%H:%I:%S' ) > (strtotime("5 minutes"))){
echo "Offline";
}else{
echo "Online";
}
?>

What can I do at this point?

Upvotes: 0

Views: 169

Answers (2)

Jon Watte
Jon Watte

Reputation: 7198

Nobody pointed out that you actually have a bug. The "current time" will never be greater than "the current time +5 minutes"

Your first code sample will work right if you instead use "-5 minutes" as the "online threshold."

Also, comparing a timestamp without date to the output of strtotime() as you do in the second code is not a proper comparison. It has two problems:

  • Each time a new day comes around, the same time value will be repeated.

  • The output of strtotime is an integer representing seconds-since-epoch; the output of format() is a textual representation of hours:minutes:seconds within the current date.

Upvotes: 1

Grmn
Grmn

Reputation: 544

As for your question how to calculate time between 2 dates / time, please view the solution on the following posts, that should give you enough information! (duplicate ? )

Calculate elapsed time in php

And here

How to get time difference in minutes in PHP

EDIT AS YOU PLEASE

<?
$first = new DateTime(); // this would hold your [last active]
//$first->modify("-6 minutes");
$second = new DateTime("NOW");
$difference = $second->diff( $first ); // second diff first
if ($difference->format('%i') > 5) { // comparing minutes only in example ( %i )
 echo "The user is AFK";
} else {
 echo "user might still be active";
}
?>

Upvotes: 0

Related Questions