我在我的表中使用了2个时间戳 starttime数据类型 - 时间戳和当前时间戳。 endtime datatype-timestamp,默认为0000-00-00 00:00:00
如何计算php中2个时间戳之间的差异 starttime:2016-11-30 03:55:06 endtimetime:2016-11-30 11:55:06
答案 0 :(得分:17)
应避免采用任何程序方式。 使用OOP方法获取日期时差:
$datetime1 = new DateTime('2016-11-30 03:55:06');//start time
$datetime2 = new DateTime('2016-11-30 11:55:06');//end time
$interval = $datetime1->diff($datetime2);
echo $interval->format('%Y years %m months %d days %H hours %i minutes %s seconds');//00 years 0 months 0 days 08 hours 0 minutes 0 seconds
您可以根据需要设置差异格式。
%Y - use for difference in year %m - use for difference in months %d - use for difference in days %H - use for difference in hours (24 hour format) %i - use for difference in minutes %s - use for difference in seconds
您可以根据需要删除上述任何值。例如,如果您只对小时差异感兴趣并且您知道差异不能超过24小时,那么只使用%H
。
如果您希望在几秒钟内获得总差异,则可以使用:
echo $difference_in_seconds = strtotime('2016-11-30 11:55:06') - strtotime('2016-11-30 03:55:06');//28800
取决于您的需要以及您希望有时差的最终格式。
供参考检查: http://php.net/manual/en/datetime.diff.php
我希望它有所帮助
答案 1 :(得分:8)
您可以使用php strtotime将时间戳转换为unix时间戳(以秒为单位的时间),然后取出差异。你现在有时间上的差异,可以转换成你需要的......小时,分钟,天
http://php.net/manual/en/function.strtotime.php
例如:
$ts1 = strtotime($start);
$ts2 = strtotime($end);
$seconds_diff = $ts2 - $ts1;
$time = ($seconds_diff/3600);
答案 2 :(得分:1)
我创建了一个函数,只需将type作为第三个参数传递,即可帮助您从两个Unix时间戳获取小时,分钟和天。
public function diffBtwTimesAsPerType($start, $end, $returnType=1) {
$seconds_diff = $start - $end;
if($returnType == 1){
return $seconds_diff/60;//minutes
}else if($returnType == 2){
return $seconds_diff/3600;//hours
}else{
return $seconds_diff/3600/24; //days
}
}
echo "<br> Minutes = ".diffBtwTimesAsPerType(1593714600, 1593541800, 1);//minutes
echo "<br> Hours = ".diffBtwTimesAsPerType(1593714600, 1593541800, 2);//hours
echo "<br> Days = ".diffBtwTimesAsPerType(1593714600, 1593541800, 3);//days
答案 3 :(得分:0)
最简单的答案(当然对我而言)是here
function dateDifference($date_1 , $date_2 , $differenceFormat = '%a' )
{
$datetime1 = date_create($date_1);
$datetime2 = date_create($date_2);
$interval = date_diff($datetime1, $datetime2);
return $interval->format($differenceFormat);
}
在这种情况下,date_create()函数创建DateTime对象
答案 4 :(得分:0)
试试这个代码,在phpfiddle.org上测试: -
function timestampdiff($qw,$saw)
{
$datetime1 = new DateTime("@$qw");
$datetime2 = new DateTime("@$saw");
$interval = $datetime1->diff($datetime2);
return $interval->format('%Hh %Im');
}
echo timestampdiff('1524794340', '1524803100');
答案 5 :(得分:0)
@atul-baldaniya,我已经修改了您的解决方案以避免负值并返回整数结果而不是十进制值。
function diffBtwTimesAsPerType($start, $end, $returnType=1) {
$seconds_diff = $end - $start;
if($returnType == 1){
return round($seconds_diff/60);//minutes
}else if($returnType == 2){
return round($seconds_diff/3600);//hours
}else{
return round($seconds_diff/3600/24); //days
}
}