2010-01-25 120 views
2

我想比较PHP中的两个日期,并计算出日期之间有多少天。我从MySQL数据库中获取第一个日期,第二个日期是当前日期。在MySQL数据库中的日期看起来像这样“2010-01-21 15:21:46”PHP中的日期差异?

$date1 = date("Y-m-d", $product['hold_date']) 
$date2 = date("Y-m-d"); 

我如何比较这两个日期,并简单地返回天量?

编辑-------------------------------------------- -------------------------------------

这工作:

$date1 = date(strtotime('2009-12-25 15:21:46')); 
$date2 = time(); 

$secondsDifference = $date2 - $date1; 
$days = floor($secondsDifference/86400); 

echo $days; 

回答

4
$secondsDifference = $date2 - $date1; 

这是日期2和日期1之间的秒数。您可能需要重新排序,具体取决于将来哪一个更近/更远。当然,如果你想要一个正数。

或者你可以使用:

$secondsDifference = abs($date2 - $date1); 

你可以做简单的算术题,找出天

define("SECONDS_IN_DAY", 60*60*24); 
$days = floor($secondsDifference/SECONDS_IN_DAY); // rounds down 
// you can use ceil() to round it up. 

的数量为了获得MySQL的日期到秒的格式,使用strtotime()

$time = strtotime($mysql_time); 

所以这样做:

$date1 = strtotime($product['hold_date']); 
$date2 = time(); 
+0

我还以为是设置的值的日期函数$ date1和$ date2返回了一个相关格式的字符串,而不是秒数,所以你不能相互减去它们? – 2010-01-25 00:52:51

+0

这是为我返回0,不知道为什么? – mike 2010-01-25 00:56:30

+0

我查阅了文档(http://php.net/manual/en/function.date.php),它说它确实会返回一个字符串,这几乎可以肯定你为什么返回0;从另一个字符串中减去一个字符串对PHP没有任何意义。 – 2010-01-25 01:04:15

0
$secondsPerDay = 24 * 60 * 60; 
$differenceInSeconds = $date2 - $date1; 
$differenceInDays = $differenceInSeconds/$secondsPerDay; 
+0

使用'floor()',你赢了;) – Franz 2010-01-25 00:37:09

+0

好点,只要整数是理想的。 – echo 2010-01-25 00:38:17

+0

$ date1 = date('Y-m-d','2010-01-22 15:21:46'); $ date2 = date('Y-m-d'); $ secondsPerDay = 24 * 60 * 60; $ differenceInSeconds = $ date2 - $ date1; $ differenceInDays = $ differenceInSeconds/$ secondsPerDay; echo $ differenceInDays; 这将返回0.000474537037037 – mike 2010-01-25 00:46:18

0

如果你可以将日期转换为时间戳,你可以做这样的:

$numDays = floor(($timestamp2 - $timestamp1)/(24 * 60 * 60)); 
+0

为什么downvote? – Franz 2010-01-25 00:49:52

0
$d1 = strtotime("2010-01-21 15:21:46"); 
$d2 = strtotime($product['hold_date']); 
echo floor(($d2-$d1)/86400) ; 
2

Strtotime会将日期/时间字符串转换为unix时间戳,给定时间与th之间的秒数e unix时代(1970年1月1日)。 time函数现在将为您提供unix时间戳。

然后,您可以从另一个日期开始计算相隔的秒数,然后除以86400(60x60x24)以获得已过去的天数。

作为将MySQL日期时间转换为PHP内部的unix的替代方法,您可以使用UNIX_TIMESTAMP MySQL函数。

编辑:正如其他人所说,你可能想floor()或ceil()得到一个整数的天数。

1

我可以建议你使用MySQL(如果可能)来计算日期差异吗? MySQL的日期函数远远优于PHP。试想一下:

# with CURDATE() resolving to 2010-01-25, this returns -3 
SELECT DATEDIFF('2010-01-22 15:21:46', CURDATE()); 

所以,我想你现在正在做这样的事情:

SELECT 
    product_id, 
    hold_date 
FROM 
    products 
WHERE 
    something = true 

只需将它改成:

SELECT 
    product_id, 
    hold_date, 
    DATEDIFF(hold_date, CURDATE()) as hold_date_diff_days 
FROM 
    products 
WHERE 
    something = true