Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何计算两个日期之间的会话数(上午12点到上午12点)_Php - Fatal编程技术网

Php 如何计算两个日期之间的会话数(上午12点到上午12点)

Php 如何计算两个日期之间的会话数(上午12点到上午12点),php,Php,我需要计算两个日期之间的会话数(上午12点到上午12点) 前 $a='12-05-2016 11:30AM' $b='14-05-2016 9:30PM' 输出应该是6 12th 11:30AM-11:59AM -->1 12TH 12:00PM-11:59PM -->2 13TH 12:00AM-11:59AM -->3 13TH 12:00PM-11:59PM -->4 14TH 12:00AM-11:59AM -->5 14TH 12:00PM-9:30PM

我需要计算两个日期之间的会话数(上午12点到上午12点)

$a='12-05-2016 11:30AM'
$b='14-05-2016 9:30PM'
输出应该是6

12th 11:30AM-11:59AM -->1
12TH 12:00PM-11:59PM -->2
13TH 12:00AM-11:59AM -->3
13TH 12:00PM-11:59PM -->4
14TH 12:00AM-11:59AM -->5
14TH 12:00PM-9:30PM --->6
我找不到正确的逻辑。请帮助找到所需的解决方案

您可以尝试下面的功能。。。要测试它,请继续


你找不到吗?不,你必须写。让我们看看你的尝试,然后我们将尝试从那里修复它。否则你会自欺欺人地认为你在学习编程,而实际上你在复制和粘贴。你的问题对我来说真的不清楚,你到底想做什么?@Script47我不需要代码,我只需要逻辑,怎么做?逻辑就是代码,除非你指的是伪代码?@Script47在这种情况下,他可能也指的是伪逻辑???现在,我们有了数学:
Logic=code
pseudo Logic=pseudo code
:-)
<?php

    $a          = '12-05-2016 11:30AM';
    $b          = '14-05-2016 9:30PM';

    function getDatesDiffInSteps($date1, $date2){
        $dateSplit1 = explode(" ", $date1); list($dA, $tA) = $dateSplit1;
        $dt1        = new DateTime($date1);
        $dt2        = new DateTime($date2);
        $baseDateA  = new DateTime($dA);
        $prDate     = new DateTime($date1);
        $i          = 1;
        $iDiff      = ($dt2->getTimestamp() - $dt1->getTimestamp());
        $diff       = $dt2->diff($dt1);
        $d           = $diff->d;
        $h          = $diff->h;
        $arr        = [];
        $prDate->setTime(0, 0, 0);

        if($iDiff > 0){
            // GET THE NEAREST 12 O'CLOCK TO THE START TIME:
            $noon       = date_create_from_format("d-m-Y H:i", "{$dA} 11:59");
            $night      = date_create_from_format("d-m-Y H:i", "{$dA} 23:59");
            if($noon>$dt1){
                $arr[]      = $dt1->format("jS h:iA") . " - " . $noon->format("H:iA") . " -->{$i}";
                $prDate->setTime(12, 0, 0);
            }else if($night>$dt1){
                $arr[]      = $dt1->format("jS h:iA") . " - " . $night->format("H:iA") . " -->{$i}";
                $prDate->setTime(24, 0, 0);
            }

            if($d){
                $h += ($d*24);
            }
            for($hr=0; $hr<=($h); $hr+=12){
                $i++;
                $lDate  = $baseDateA->add(new DateInterval("PT12H"));
                $sDate  = $prDate->add(new DateInterval("PT11H59M59S"));
                if($i < intval($h/12)+2){
                    $arr[]  = $lDate->format("jS h:iA") . " - " . $sDate->format("h:iA") . " -->{$i}";
                }else{
                    $arr[]  = $lDate->format("jS h:iA") . " - " . $dt2->format("h:iA") . " -->{$i}";
                }
            }

        }
        return $arr;
    }
    var_dump(getDatesDiffInSteps($a, $b));

    // PRODUCES:
    array (size=6)
      0 => string '12th 11:30AM - 11:59AM -->1' (length=27)
      1 => string '12th 12:00PM - 11:59PM -->2' (length=27)
      2 => string '13th 12:00AM - 11:59AM -->3' (length=27)
      3 => string '13th 12:00PM - 11:59PM -->4' (length=27)
      4 => string '14th 12:00AM - 11:59AM -->5' (length=27)
      5 => string '14th 12:00PM - 09:30PM -->6' (length=27)