如何减去两个日期,忽略PHP中的夏令时?

spr*_*man 1 php datetime dst

我正在尝试计算两天之间的天数,但我遇到了夏令时的问题.这是我的代码:

function date_diff($old_date, $new_date) {
    $offset = strtotime($new_date) - strtotime($old_date);
    return $offset/60/60/24;
}
Run Code Online (Sandbox Code Playgroud)

只要天数都在同一个DST期间,就可以正常工作:

echo date_diff('3/15/09', '3/18/09'); // 3
Run Code Online (Sandbox Code Playgroud)

但如果它们相距甚远则不是:

echo date_diff('11/15/08', '3/18/09'); // 122.95833333333
Run Code Online (Sandbox Code Playgroud)

我想要偶数天,而不关心夏令时.我想我可以绕过结果,但感觉很糟糕.有更好的(简单)方式吗?如果我可以避免它,我不想写一整天解析和计数 - 避免闰年的事情.

(注意:这必须在php 5.1.6下运行,因此5.3中的某些日期功能可能无法使用.)

更多信息:我将获取偏移量并将其添加到数据库中的其他日期时间,并且我只希望更改日期部分,而不是时间部分.无论如何,结果舍入将无效,因为当我进行添加时,它会在另一个方向上下一个小时.也许对整个问题有一个更好的方法....

art*_*ung 7

在没有夏令时,GMT/UTC的情况下强制日期进入时区:

function date_diff($old_date, $new_date) {
  $offset = strtotime($new_date . " UTC") - strtotime($old_date . " UTC");
  return $offset/60/60/24;
}

echo date_diff('3/15/09', '3/18/09'); // 3
echo date_diff('11/15/08', '3/18/09'); // 123
Run Code Online (Sandbox Code Playgroud)