使用strtotime计算天数会返回错误的结果

时间:2010-09-20 10:31:02

标签: php mysql date operators strtotime

我有两个日期存储在mysql数据库中(Type = date)。例如 -

日期1 = 2010-09-20
日期2 = 2010-10-20

我想计算这两个日期之间的天数。所以试过这个 -

$number_days = (strtotime($date2) - strtotime($date1) / (60 * 60 * 24));

但这会返回49

怎么样?

-------------------------------------更新--------- ---------------------------------

好的,我意识到我的问题导致了一些混乱。我正在使用另一个函数来检索日期1,由于各种原因,这个日期没有正确返回,因此给出的天数实际上是正确的。当我从数据库中检索到正确的日期时,我上面的计算有效,考虑到/ over -

的优先级

感谢您的回复。

3 个答案:

答案 0 :(得分:16)

/的{​​{3}}高于-

因此(a - b / c)将被视为( a - (b/c) ),但您需要的是( (a - b) / c )

所以试试:

$number_days = (strtotime($date2) - strtotime($date1))  / (60 * 60 * 24);

答案 1 :(得分:1)

您可以使用MySql查询

执行此操作
SELECT (TO_DAYS( date1 ) - TO_DAYS( date2 )) as difference FROM MyTable

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_to-days

答案 2 :(得分:1)

如果您从MySQL数据库中获取这两个日期,我总是发现在SQL查询期间将它们转换为UnixDateTime整数格式更容易。它们以这种格式更容易处理。

您的查询将如下所示:

SELECT *, UNIX_TIMESTAMP(date1) date1_u, UNIX_TIMESTAMP(date2) as date2_u from mytable

我总是发现这样做要比将日期作为字符串更好,然后不得不混淆PHP笨重的日期处理函数。

也就是说,PHP5.3中的日期类要好得多 - 它甚至还有日期加/减功能,这也比strtotime()更好地解决你的问题......假设你使用的是PHP 5.3。

希望有所帮助。但我知道这并没有直接回答这个问题!