Datetime comparison PHP/Mysql?

南楼画角 提交于 2020-02-20 05:34:19

问题


I'm trying to make something like this:

if (datetime - system date > 15 minutes) (false)

if (datetime - system date <= 15 minutes) (true)

But I'm totally lost. I don't know how to make this operation in PHP.

I'd like to see how I can pick that DateTime from my database and check if it's between the last 15 minutes of my server's time.

The type of database is MySQL.


Finally, I managed to do it thanks to Sammitch and the other ones, here i leave the snippet:

$now    = time();
$target = strtotime($row[1]);
$diff   = $now - $target;

// 15 minutes = 15*60 seconds = 900
if ($diff <= 900) {
    $seconds = $diff;
} else {
    $seconds = $diff;
}

回答1:


If your dates are already in MySQL you will want to do the comparison in the query because:

  1. MySQL has proper DATE types.
  2. MySQL has indexes for comparison.
  3. MySQL performs comparisons much faster than PHP.
  4. If you filter your data in the query then less, or no time is spent transferring superfluous data back to the application.

Below is the most efficient form. If there is an index on the date column it will be used.

SELECT *
FROM table
WHERE date > DATE_SUB(NOW(), INTERVAL 15 MINUTE)

Docs: DATE_SUB()

If you need to do it in PHP:

$now = time();
$target = strtotime($date_from_db);
$diff = $now - $target;
if ( $diff > 900 ) {
  // something
}

or, more succinctly:

if( time() - strtotime($date_from_db) > 900 ) {
  // something
}



回答2:


You have a solution for MYSQL in other answers, a good solution for PHP is:-

$now = new \DateTime();
$target = new \DateTime(getTimeStringFromDB());
$minutes = ($target->getTimestamp() - $now->getTimestamp())/60;
if($minutes < 15){
    // Do some stuff
} else {
    //Do some other stuff
}



回答3:


the most efficient PHP/MySQL combined solution is:

$date = date('Y-m-d H:i:s', strtotime('-15 minutes'));
$data = $pdo->query("SELECT date_field > '$date' as expired from table")->fetchAll(PDO::FETCH_COLUMN);
foreach($data as $expired) {
    if (!$expired) {
        // Still Valid
    }
}



回答4:


Try this

$interval = date_create($date_from_db)->diff(new \DateTime());
if ($interval->format('%r%l')>15) {
    $result = false;
} else {
    $result = true;
}


来源:https://stackoverflow.com/questions/23813201/datetime-comparison-php-mysql

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!