在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")