1

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

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

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

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

但这会返回 49

怎么会这样?

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

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

感谢您的回复。

4

3 回答 3

19

/precedence高于-

所以 (a - b / c)将被视为( a - (b/c) )但你需要的是( (a - b) / c )

所以试试:

$number_days = (strtotime($date2) - strtotime($date1))  / (60 * 60 * 24);
于 2010-09-20T10:32:39.143 回答
2

您可以使用 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

于 2010-09-20T10:34:19.107 回答
2

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

您的查询将如下所示:

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

我一直发现这样做比将日期作为字符串获取要好得多,然后不得不使用 PHP 笨拙的日期处理函数。

也就是说,日期类在 PHP5.3 中要好得多——它甚至具有日期加/减函数,这也比 strtotime() 更好地解决您的问题...假设您使用的是 PHP 5.3。

希望有帮助。我知道这并不能直接回答这个问题!

于 2010-09-20T10:39:31.563 回答