我有從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但沒有太大的成功..
任何幫助歡迎!
我有從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但沒有太大的成功..
任何幫助歡迎!
沒有成功?
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
}
你爲什麼要混合PHP時間和MySQL時間?
而是直接做比較,在MySQL:
要獲得MySQL的當前日期/時間使用NOW()
功能。您可以比較,例如,2010-06-19 09:39:23' < DATE_SUB(NOW(), INTERVAL 1 DAY)
這將檢查給定日期(推測在列中)是否早於24小時。
如果絕對有必要將MySQL時間戳轉換爲UNIX時間戳,那麼可以使用MySQL的UNIX_TIMESTAMP()
函數來完成此操作。
我會做,但目前還沒有訪問查詢,所以這就是爲什麼我需要做它與返回的值。 – 2010-06-19 14:09:41
你也可以這樣做:
SELECT * FROM my_table WHERE timestamp < NOW() - INTERVAL 1 DAY;
DATE_SUB(CURDATE(),INTERVAL 1天)是正確的方法 – 2013-11-08 09:50:05
@Zahid:我發佈的解決方案有什麼問題? – 2013-11-08 23:46:44
我寫了一個函數,通過該函數可以確定第一個給定日期是一天還是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;
}
}
非常感謝,今天我的頭似乎沒有被正確地擰上! – 2010-06-19 14:08:47