php日期减法使用strtotime函数不返回正确的时间长度

时间:2011-08-09 00:32:36

标签: php oracle strtotime

我正在将基于PHP(v 5.2.17)的报告转换为SSRS。

我正在尝试编写一个减去像php文件一样的日期的查询。

日期计算要么完全匹配,要么恰好相差3600秒

  $timediff=strtotime(date("Y-m-d"))-strtotime("03/29/2007");
  print $timediff;  // 137635200 

  select (trunc(sysdate) - to_date('03/29/2007','MM/DD/YYYY'))*60*60*24 from dual
  -- returns 137635200 - matches


  $timediff=strtotime(date("Y-m-d"))-strtotime("11/23/2009");
  print $timediff;  // 53823600 

  select (trunc(sysdate) - to_date('11/23/2009','MM/DD/YYYY'))*60*60*24 from dual
  -- returns 53827200 - doesnt match - off by 3600

我搜索了stackoverflow,发现以下示例听起来像它(11/23/2009是星期一,今天也是8/8,但它没有相同的方式不同)PHP Strtotime erratic function < / p>

我的假设是php计算错误,oracle是正确的。

你说什么? ; - )

谢谢!

3 个答案:

答案 0 :(得分:3)

没有看到我怀疑它的确切值,因为其中一个正在调整夏令时而另一个则没有。世界上大多数地区在游行期间改变夏令时。所以在你的第一个例子中,两个日期都在相同的GMT偏移中,但在第二个(11月),它们不是。

所以你的一个平台(可能是甲骨文)正在考虑这一小时的转变而另一个则没有。

答案 1 :(得分:1)

3600 =一小时可能是时区差异?

答案 2 :(得分:0)

53827200 =(623 * 60 * 60 * 24)

所以53827200正是24小时的623天。

53823600是622.958333天或622天(24小时)加上23小时。

对于给定的权利定义,两者都是正确的。