在PHP中获取两个date时间之间的间隔秒?

2009-10-05 18:11:08

2009-10-05 18:07:13

这应该生成235,怎么做?

你可以使用strtotime()来做到这一点:

$diff = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13') 

有了DateTime对象,你可以这样做:

 $date = new DateTime( '2009-10-05 18:07:13' ); $date2 = new DateTime( '2009-10-05 18:11:08' ); $diffInSeconds = $date2->getTimestamp() - $date->getTimestamp(); 

PHPdate时间参考对于这样的事情是有帮助的: PHPdate时间函数

strtotime()可能是最好的方法。

 $seconds = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13') 

由于unix时代的限制,在1970年以前和2038年之后,你可能会遇到比较date的问题。我select松散精度(=不要看单秒),但是避免通过unix时代转换(getTimestamp)。 这取决于你在做什么…

在我的情况下,使用365代替(12 * 30)和“30”作为平均月份长度,减less了可用输出中的错误。

 function DateIntervalToSec($start,$end){ // as datetime object returns difference in seconds $diff = $end->diff($start); $diff_sec = $diff->format('%r').( // prepend the sign - if negative, change it to R if you want the +, too ($diff->s)+ // seconds (no errors) (60*($diff->i))+ // minutes (no errors) (60*60*($diff->h))+ // hours (no errors) (24*60*60*($diff->d))+ // days (no errors) (30*24*60*60*($diff->m))+ // months (???) (365*24*60*60*($diff->y)) // years (???) ); return $diff_sec; } 

请注意,如果“平均”数量用于比较,则错误可能为0。 PHP文档不会讲这个…在一个不好的情况下,错误可能是:

  • 如果时间间隔小于1个月,差异为0秒
  • 0到3天,如果diff应用于时间间隔> 1个月
  • 如果diff应用于时间间隔> 1年的0至14天

我更愿意假设有人决定把“m”看作是30天,把“y”看作365,把“差异”走过非30天的月份看作是“d”。

如果有人对此有更多的了解,并可以提供官方文件,欢迎!

 strtotime("2009-10-05 18:11:08") - strtotime("2009-10-05 18:07:13")