PHP中的日期差异?
我想比较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;
$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();
$secondsPerDay = 24 * 60 * 60;
$differenceInSeconds = $date2 - $date1;
$differenceInDays = $differenceInSeconds/$secondsPerDay;
使用'floor()',你赢了;) – Franz 2010-01-25 00:37:09
好点,只要整数是理想的。 – echo 2010-01-25 00:38:17
$ 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
如果你可以将日期转换为时间戳,你可以做这样的:
$numDays = floor(($timestamp2 - $timestamp1)/(24 * 60 * 60));
为什么downvote? – Franz 2010-01-25 00:49:52
$d1 = strtotime("2010-01-21 15:21:46");
$d2 = strtotime($product['hold_date']);
echo floor(($d2-$d1)/86400) ;
Strtotime会将日期/时间字符串转换为unix时间戳,给定时间与th之间的秒数e unix时代(1970年1月1日)。 time函数现在将为您提供unix时间戳。
然后,您可以从另一个日期开始计算相隔的秒数,然后除以86400(60x60x24)以获得已过去的天数。
作为将MySQL日期时间转换为PHP内部的unix的替代方法,您可以使用UNIX_TIMESTAMP MySQL函数。
编辑:正如其他人所说,你可能想floor()或ceil()得到一个整数的天数。
我可以建议你使用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
我还以为是设置的值的日期函数$ date1和$ date2返回了一个相关格式的字符串,而不是秒数,所以你不能相互减去它们? – 2010-01-25 00:52:51
这是为我返回0,不知道为什么? – mike 2010-01-25 00:56:30
我查阅了文档(http://php.net/manual/en/function.date.php),它说它确实会返回一个字符串,这几乎可以肯定你为什么返回0;从另一个字符串中减去一个字符串对PHP没有任何意义。 – 2010-01-25 01:04:15