2010-06-19 123 views
7

我有從MySQL返回的記錄有日期時間字段。我想要做的是採取這個值,看看它是否比24小時更老,我認爲使用PHP的時間()來獲得當前時間。檢查mySql的日期時間是否比php早1天()

此刻,如果我贊同出來,我得到:

1276954824   this is php's time() 
2010-06-19 09:39:23 this is the MySQL datetime 

我相信上面一個是UNIX時間?一直玩strtotime但沒有太大的成功..

任何幫助歡迎!

回答

26

沒有成功?

echo strtotime("2010-06-19 09:39:23"); 

給我

1276940363 

mktime(9, 39, 23, 6, 19, 2010)給出了同樣的時間,所以解析正常工作)


要獲得秒的差異,您可以。減去時間戳,例如

$diff = time() - strtotime("2010-06-19 09:39:23"); 

如果差異大於86400(60 * 60 * 24)秒,那麼時間戳相隔超過一天:

if(time() - strtotime("2010-06-19 09:39:23") > 60*60*24) { 
    // timestamp is older than one day 
} 
+0

非常感謝,今天我的頭似乎沒有被正確地擰上! – 2010-06-19 14:08:47

3

你爲什麼要混合PHP時間和MySQL時間?

而是直接做比較,在MySQL:

要獲得MySQL的當前日期/時間使用NOW()功能。您可以比較,例如,2010-06-19 09:39:23' < DATE_SUB(NOW(), INTERVAL 1 DAY)

這將檢查給定日期(推測在列中)是否早於24小時。

如果絕對有必要將MySQL時間戳轉換爲UNIX時間戳,那麼可以使用MySQL的UNIX_TIMESTAMP()函數來完成此操作。

+1

我會做,但目前還沒有訪問查詢,所以這就是爲什麼我需要做它與返回的值。 – 2010-06-19 14:09:41

9

你也可以這樣做:

SELECT * FROM my_table WHERE timestamp < NOW() - INTERVAL 1 DAY; 
+1

DATE_SUB(CURDATE(),INTERVAL 1天)是正確的方法 – 2013-11-08 09:50:05

+1

@Zahid:我發佈的解決方案有什麼問題? – 2013-11-08 23:46:44

0

我寫了一個函數,通過該函數可以確定第一個給定日期是一天還是n天大於或小於第二個給定日期。

$date1 = "2013/03/01"; 
$date2 = "2013/03/01"; 
$sign = "-"; 
$diff = 1; 
$result = isDaysSmallerBigger($date1, $date2, $sign, $diff); 
var_dump($result); 

/** 
* Note: this function is only supported in php 5.3 or above 
* 1. If $date1 - $date2 = $sign $diff days, return true; 
* 2. If $date1 equals $date2 and $diff euqals 0, whether $sign is "+" or "-", return true 
* 3. Else return false; 
* @param unknown_type $date1 
* @param unknown_type $date2 
* @param string $sign: "-": $date1 < $date2; "+": $date1 > $date2; 
* Besides if $diff is 0, then both "-" and "+" means $date1 === $date2; 
* @param integer $diff: date difference between two given dates 
*/ 
function isDaysSmallerBigger($date1, $date2, $sign, $diff) { 
    $dateTime1 = new DateTime($date1); 
    $dateTime2 = new DateTime($date2); 

    $interval = $dateTime2->diff($dateTime1); 
    $dayDiff = $interval->format('%a'); 
    $diffSign = $interval->format('%R'); 

    if((int)$dayDiff === (int)$diff) { 
     // Correct date difference 

     if((int)$diff !== 0) { 
      // Day difference is not 0 
      if($diffSign === $sign) { 
      return true; 
      } else { 
      return false; 
      } 
     } else if((int)$diff === 0) { 
      // Day difference is 0, then both given "+" and "-" return true 
      return true; 
     } 
    } else { 
     // Incorrect date difference 
     return false; 
    } 
} 
相關問題