首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于移位时间计算时间持续时间

基于移位时间计算时间持续时间
EN

Stack Overflow用户
提问于 2017-09-21 23:29:14
回答 2查看 746关注 0票数 0

我正在计算$work_in_daytime和$work_in_nighttime。

代码语言:javascript
复制
$nightStart = '22:00';
$nightEnd = '07:00';

$workers = array(
    '0' => array(
        'name'  => 'Lyons',
        'start' => '15:15',
        'end'   => '23:45'
    ),

    '1' => array(
        'name'  => 'Santos',
        'start' => '10:00',
        'end'   => '22:00'
    ),

    '2' => array(
        'name'  => 'Montgomery',
        'start' => '22:30',
        'end'   => '08:00'
    )
); 

我试过遵循密码。

代码语言:javascript
复制
foreach ($workers as $worker) {
    $startTime = strtotime($em['start']);
    $endTime = strtotime($em['end']);
    $length = formattedTime($endTime - $startTime);

    $nightTimeStart = strtotime($nightStart);
    $nightTimeEnd = strtotime($nightEnd);
    $dayTimeLength = 0;
    $nightTimeLength = 0;

    if ($startTime > $nightTimeStart) {
        $nightTimeLength += $startTime - $nightTimeStart;
    }
    if ($startTime < $nightTimeStart) {
        $dayTimeLength += $nightTimeStart - $startTime;
    }
    if ($endTime > $nightTimeStart) {
        $nightTimeLength += $endTime - $nightTimeStart;
    }
    if ($endTime < $nightTimeStart) {
        $dayTimeLength += $endTime - $nightTimeStart;
    }

    echo 'Day Time: '.$dayTimeLength.PHP_EOL;
    echo 'Night Time: '.$nightTimeLength.PHP_EOL;
}

我一直在做正确的计算。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-21 23:50:45

试试这个:

代码语言:javascript
复制
$nightStart = '22:00';
$nightEnd = '07:00';

$workers = array(
    '0' => array(
        'name'  => 'Lyons',
        'start' => '15:15',
        'end'   => '23:45'
    ),

    '1' => array(
        'name'  => 'Santos',
        'start' => '6:00',
        'end'   => '22:00'
    ),

    '2' => array(
        'name'  => 'Montgomery',
        'start' => '22:30',
        'end'   => '08:00'
    )
); 
function timetodate($time)
{
    return date('H:i', $time);

}
foreach ($workers as $worker) {
    $startTime = strtotime($worker['start']);
    $endTime = strtotime($worker['end']);
    $length = date('H:i',($endTime - $startTime));
    $day = strtotime("24H");

    $nightTimeStart = strtotime($nightStart);
    $nightTimeEnd = strtotime($nightEnd);
    $dayTimeLength = 0;
    $nightTimeLength = 0;

    /* Night Time Calculations */
    if ($endTime <= $startTime) {
        if ($startTime >= $nightTimeStart) {
            $nightTimeLength += $day - $startTime;
            if ($endTime <= $nightTimeEnd) {
                $nightTimeLength += $nightTimeEnd - $endTime;
            }
            else
            {
                $nightTimeLength += $nightTimeEnd;
            }
        }
    }
    elseif ($endTime > $nightTimeStart) {
        $nightTimeLength += $endTime - $nightTimeStart;
    }
    elseif ($startTime < $nightTimeEnd) {
        $nightTimeLength += $nightTimeEnd - $startTime;
    }

    /*  Day Time Calculations  */
   if ($startTime >= $nightTimeEnd) {
       if ($endTime <= $nightTimeStart) {
           if ($startTime < $endTime) {
                $dayTimeLength += $endTime - $startTime;
           }
           else
           {
               $dayTimeLength += $endTime - $nightTimeEnd;
           }
        }
        else
        {
            $dayTimeLength += $nightTimeStart - $startTime;
        }
    }
    else
    {
        if ($endTime <= $nightTimeStart) {
            $dayTimeLength += ($endTime - $nightTimeEnd);
        }
        else
        {
            $dayTimeLength += $nightTimeStart - $nightTimeEnd;
        }
    }

    echo "Name:". $worker['name'].PHP_EOL;
    echo 'Day Time: '.timetodate($dayTimeLength).PHP_EOL;
    echo 'Night Time: '.timetodate($nightTimeLength).PHP_EOL.PHP_EOL;
}

https://www.tehplayground.com/CkZ53jjD1cyFEymB

较早的帖子:忽略- https://www.tehplayground.com/PohT0L7s35m9VKOe

是像这样吗?虽然我没有调整它,但我认为我需要对它做更多的修改,以使它在新的一天到来时得到正确的调整(我不认为它是一个持续的转变)。

票数 1
EN

Stack Overflow用户

发布于 2017-09-22 00:25:11

  • 变量$em未定义。
  • 不确定白天和夜间的常数是什么,但假设您计算白天从早上6点到下午6点,夜间时间从下午6点到6点:
代码语言:javascript
复制
<?php
$start_nighttime = strtotime('18:00');
$end_nighttime = strtotime('05:59');
$start_daytime = strtotime('06:00');
$end_daytime = strtotime('17:59');

foreach($worker as $data){
       $worker_start = strtotime($data['start']);
       $worker_end = strtotime($data['end']);
       if ($worker_start > $start_daytime && $worker_end < $start_nighttime) {
          //Worked only during the day
          $daytime = round(abs($worker_start - $worker_end) / 60, 2);
       } elseif ($worker_start > $start_daytime && $worker_end > $end_nighttime) {
         //Worked during the day and extended past defined night time
         $daytime = round(abs($worker_start - $end_daytime) / 60, 2);
         $nighttime = round(abs($start_nightime - $worker_end) / 60, 2);
       } elseif ($worker_start > $start_nighttime && $worker_end < $end_nighttime){
         //Worked only during the night
         $nighttime = round(abs($worker_start - $worker_end));
       } elseif ($worker_start > $start_nighttime && $worker_end > $end_nighttime){
         //Worked only during the night up until the moring
         $nighttime = round(abs($worker_start - $end_nighttime));
         $daytime = round(abs($start_daytime - $worker_end));
       }
}
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46354666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档