PHP从0/0/0 00:00:00计算日期间隔

时间:2019-07-16 11:50:36

标签: php date datetime strtotime duration

我需要计算持续时间并使之易于阅读。 例如我有一个字符串:“ 2 days 4 hours”。我需要我的代码来计算该字符串的持续时间作为时间戳,并使其易于阅读。

我的问题是,如果我将时间戳记添加到0,则它从1970年1月1日开始,但是我只需要它来计算持续时间。

我尝试将{1/11970} 1/1/1970减去0,但在计算时返回无意义的结果。

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,则您希望进行以下修改:

$dateString = "2 days 4 hours";

要时间戳吗?

如果是这样,并且您知道总是有几天/几小时的时间,您可以执行以下操作:

$dateString = "2 days 4 hours";
preg_match_all('!\d+!', $dateString , $numbersOnly);
$partialTimeStamp= (($numbersOnly[0][0]*24)+$numbersOnly[0][1])*3600;
print_r($partialTimeStamp); // will print 187200

有了这个,您将有几秒钟的时间。例如,如果您的字符串中也有分钟,您可以这样做:

$dateString = "2 days 4 hours 15 minutes";
preg_match_all('!\d+!', $dateString , $numbersOnly);
$partialTimeStamp= (($numbersOnly[0][0]*24)+$numbersOnly[0][1])*3600 + $numbersOnly[0][2]*60;
print_r($partialTimeStamp); // will print 188100

使用此部分时间戳,您可以像下面这样计算下一个时间戳:

$nextTimeStamp = time () + $partialTimeStamp;
print_r($nextTimeStamp);

编辑:缺少“返回人类可读”的部分。 为此,您可以执行以下操作:

$days = floor($partialTimeStamp/ 86400);
$partialTimeStamp = $partialTimeStamp - $days*86400;
$hours = floor($partialTimeStamp/ 3600);
$min = floor($partialTimeStamp/ 60 % 60);

不仅仅是这个:

print_r($days." days ".$hours." hours ".$min. " minutes");// will output 2 days 4 hours 15 minutes 

我希望这会有所帮助。

BR