簡體   English   中英

日期時間比較 PHP/Mysql?

[英]Datetime comparison PHP/Mysql?

我正在嘗試做這樣的事情:

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

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

但我完全迷失了。 我不知道如何在 PHP 中進行此操作。

我想看看如何從我的數據庫中選擇 DateTime 並檢查它是否在我服務器時間的最后 15 分鍾之間。

數據庫類型為 MySQL。


最后,感謝 Sammitch 和其他人,我設法做到了,在這里我留下了片段:

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

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

如果您的日期已經在 MySQL 中,您將需要在查詢中進行比較,因為:

  1. MySQL 有適當的 DATE 類型。
  2. MySQL 有用於比較的索引。
  3. MySQL 執行比較速度比 PHP 快得多。
  4. 如果您在查詢中過濾數據,則將減少或不會花費時間將多余的數據傳輸回應用程序。

下面是最有效的形式。 如果date列上有索引,則將使用該索引。

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

文檔: DATE_SUB()

如果您需要在 PHP 中執行此操作:

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

或者,更簡潔地說:

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

您在其他答案中有針對 MYSQL 的解決方案,針對 PHP 的一個很好的解決方案是:-

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

最高效的 PHP/MySQL 組合解決方案是:

$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
    }
}

嘗試這個

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM