PHP的日期差异?

时间:2010-01-25 00:32:31

标签: php

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

$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;

7 个答案:

答案 0 :(得分:4)

$secondsDifference = $date2 - $date1;

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

或者您可以使用:

$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();

答案 1 :(得分:2)

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

然后,您可以将另一个日期与另一个相隔,以获得天数之间的秒数,并除以86400(60x60x24)以获得已过去的天数。

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

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

答案 2 :(得分: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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

使用PHP 5.3查看date_diff()

答案 6 :(得分:0)

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