2012-03-18 135 views
0

我有一个包含存储在其中的日期时间数据的MySQL表。 我需要知道自给定时间以来30天过去了。 我该怎么做?PHP/MySQL:日期时间计算?

样机代码:

$query = mysql_query("SELECT data FROM myTable LIMIT 1"); 
$row = mysql_fetch_array($query); 
if(days_passed($row['date'], 30)) 
    echo "30 days has passed since the given date time."; 
+1

简短的回答:* WHERE日期>“2012-04-17” *( date('Ym-d',strtotime('today + 30 days'))*)长答案:很多方法。 – Corbin 2012-03-18 08:07:03

+1

'date'字段的格式/数据类型是什么? – Starx 2012-03-18 08:12:18

+1

@corbin,这是一个答案,你应该添加它作为答案而不是评论。 – 2012-03-18 08:13:32

回答

3

直接回答这个问题,你可以在你的if语句使用此功能。

function days_passed($date, $days) { 
    $old = new DateTime($date); 
    $now = new DateTime(); 
    $interval = $old->diff($now); 
    return ($interval->days >= $days); 
} 

如果提供的日期和现在的日期之间的差异> =第二个参数中提供的天数,那么将返回true。

但是,您可能更愿意使用SQL来执行此操作。

+0

如果你想知道天数,最好使用'$ interval-> days'。 '$ interval-> d'返回一个在'1个月和5天'等语句中很有用的数字。 – Arjan 2012-03-18 08:19:02

+0

@Arjan woops - 更正了,谢谢。 – 2012-03-18 08:19:37

2

您可以只选择直接从数据库中的结果;

SELECT *, ADDDATE(`date`, INTERVAL 30 DAY) < NOW() more_than_30_days_ago 
FROM myTable LIMIT 1; 

然后使用类似的东西;

if($row['more_than_30_days_ago']) 
    echo "30 days has passed since the given date time."; 

简单演示数据库部分here

0

下面是用PHP:

$days = 30; 
if(date('Y-m-d', strtotime("{$row['date']} +{$days}day")) < date('Y-m-d')) 
    echo "More than 30 days has passed"; 
1
$date = date('Y-m-d', strtotime('today + 30 days')); 
$query = mysql_query("SELECT date FROM tbl WHERE date > '{$date}' LIMIT 1"); 
if (mysql_num_rows($query)) { ... } 

在你的问题,你只是拉数据来检查它,所以你甚至不需要拉它。只需使用WHERE子句,然后如果拉出一行,就会发现它已被找到。

(如果你确实需要再处理数据,或其他条件都参与,其他的答案之一是可能会更好。)