我有从MySQL返回的记录,它有一个datetime字段。我想要做的是取这个值,看看它是否比24小时更早,我假设使用PHP的time()来获取当前时间。
如果我回应他们,我得到:
1276954824 this is php's time()
2010-06-19 09:39:23 this is the MySQL datetime
我认为最重要的是unix时间?一直在玩strtotime但没有太大的成功..
欢迎帮助!
答案 0 :(得分:27)
没有成功?
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
}
答案 1 :(得分:9)
你也可以这样做:
SELECT * FROM my_table WHERE timestamp < NOW() - INTERVAL 1 DAY;
答案 2 :(得分:3)
为什么要混合PHP时间和MySQL时间?
相反,直接在MySQL中进行比较:
要在MySQL中获取当前日期/时间,请使用NOW()
函数。例如,您可以比较2010-06-19 09:39:23' < DATE_SUB(NOW(), INTERVAL 1 DAY)
这将检查给定日期(可能在一列中)是否超过24小时。
如果绝对有必要将MySQL时间戳转换为UNIX时间戳,则可以使用MySQL的UNIX_TIMESTAMP()
函数来执行此操作。
答案 3 :(得分: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;
}
}