PHP用H:i:s格式计算两个时间之间的时间


PHP calculate between two time with H:i:s format

我试图找到并计算startime之间,完成时间为:starttime + 1 hour和当前时间。如果当前时间介于开始和结束之间,则必须打印消息,如please try after 1 hour:

$current_date_time = new DateTime("now", new DateTimeZone("Asia/Tehran"));
$user_current_time = $current_date_time->format("H:i:s");
$start_limit_time = date("H:i:s",strtotime('2015-09-15 14:57:31'));
$finish_limit_time = date('H:i:s', strtotime($start_limit_time) + (60 * 60 * 1));
$date1 = DateTime::createFromFormat('H:i:s', $user_current_time);
$date2 = DateTime::createFromFormat('H:i:s', $start_limit_time);
$date3 = DateTime::createFromFormat('H:i:s', $finish_limit_time);
if ($date1 > $date2 && $date1 < $date3)
{
    echo 'here';
}

这个代码是不正确的,我不能修复,

您可以试试这个,它显示了以分钟为单位的差异:

$current_date_time = new DateTime("now", new DateTimeZone("Asia/Tehran"));
$user_current_time = $current_date_time->format("H:i:s");
$start_limit_time = date("H:i:s",strtotime('2015-09-15 14:57:31'));
$finish_limit_time = date('H:i:s', strtotime($start_limit_time) + (60 * 60 * 1));
$date1 = DateTime::createFromFormat('H:i:s', $user_current_time);
$date2 = DateTime::createFromFormat('H:i:s', $start_limit_time);
$date3 = DateTime::createFromFormat('H:i:s', $finish_limit_time);
if ($date1 > $date2 && $date1 < $date3)
{
    $tryAgainIn = $date3->diff( $date1 );
    // just minutes
    echo "try again in ".$tryAgainIn->format( "%i minutes" );
    // or hours and minutes
    $hours   = $tryAgainIn->format('%h');
    $minutes = $tryAgainIn->format('%i');
    echo "try again in $hours hours and $minutes minutes";
}
有关更多信息,请查看:DateTime::diff

首先应该避免使用字符串格式,因为它们应该只用于从外部打印和检索数据。只使用时间戳或OOP方法。

我相信,这是你正在寻找的东西:

$startTime = new DateTime('2015-09-15 14:57:31');
$endTime = clone $startTime;
$endTime->modify('+1 hour');

if ($startTime->getTimestamp() <= time() && time() < $endTime->getTimestamp()) {
    echo 'here';
}

我想知道你为什么要用H: I:s格式。你能说得更详细些吗?


编辑:试试这个,因为在此之前我没有完全理解你想做什么;)

$origin = new DateTime('2015-09-15 14:57:31');
$startTime = new DateTime('today '.$origin->format('H:i:s'));
$endTime = clone $startTime;
$endTime->modify('+1 hour');

if ($startTime->getTimestamp() <= time() && time() < $endTime->getTimestamp()) {
    echo 'here';
}