我正在尝试比较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;
答案 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) ;