2

所以我试图计算一个日期与另一个日期的偏移天数。目前我正在使用:

$now = new DateTime();
$dateToCompare = new DateTime("<filled from DB>");
$diff = $now->diff($dateToCompare);
echo $diff->format("%R%a");

我发现这是比较日期并给出相对于 24 小时期间的偏移量,而不是日历日。

例如,这些日期的日期偏移量为 0(我希望它为 1):

2012-10-11 19:27:04 和 2012-10-12 06:50:00

我是否正确使用了这个功能?我希望这是 1 的偏移量;但是经过大量调试后,我发现这是我在日期偏移中实际看到的差异的根源。

(也按照 PHP 的建议设置时区)

提前感谢您的帮助!

4

3 回答 3

3

尝试使用DateTime::createFromFormat仅使用月、日和年来创建对象。

也许尝试以下未经测试的代码:

$now = DateTime::createFromFormat('Y-m-d', date('Y-m-d')); // Note that if no timestamp is given, it uses the current time instead of 12am
$dateToCompare = DateTime::createFromFormat('Y-m-d', "<filled from DB>"); //match format of db datetime
$diff = $now->diff($dateToCompare);
echo $diff->format("%R%a");
于 2012-10-12T02:43:38.707 回答
1

如果您正在寻找一种简单的方法,您可以试试这个

$date1 = strtotime("2012-10-11 19:27:04");
$date2 = strtotime("2012-10-12 06:50:00");
$diff = ($date1-$date2);
echo date('j',$diff)." days";

输出为 31 天

您可以在这里http://php.net/manual/en/function.date.php用支持的日期格式字符替换“j”

于 2012-10-12T03:15:06.053 回答
0

只需使用年、月和日期:

$now = strtotime(Date("Y-m-d", strtotime("2012-10-12 06:50:00")));
$pre = strtotime(Date("Y-m-d", strtotime("2012-10-11 19:27:04")));
var_dump(($now-$pre)/86400);

在我的环境DateTime中不起作用。

于 2012-10-12T03:43:28.473 回答