首页 > 解决方案 > PHP 从 0/0/0 00:00:00 计算日期间隔

问题描述

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

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

我尝试将 1/1/1970 01:01:00 减去,0但在计算时返回一个无意义的结果。

标签: phpdatedatetimestrtotimeduration

解决方案


如果我对您的理解正确,您想转换如下内容:

$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


推荐阅读