生成工作日数组,每天工作时间

时间:2017-01-02 20:43:15

标签: php arrays

您好我正在尝试生成计算每个月的所有日子然后减去周末的数组,之后我想每天增加8小时,所以1 = 8,2 = 16等。到目前为止我已经能够生成特定月份的所有日子的数组。试图减去周末,每天增加8小时但到目前为止没有运气。

这是我的代码:

<?php 
                        $list=array();
                        $month = 1;
                        $year = 2017;

                        for($d=1; $d<=31; $d++)
                        {
                            $time=mktime(12, 0, 0, $month, $d, $year);          
                            if (date('m', $time)==$month  && ((date('D', $time) != 'Sat' || (date('D', $time) != 'Sun'))))    

                                $list[]=date('d', $time);
                        }

                        echo "<pre>";
                        print_r($list);
                        echo "</pre>";
                   ?>

所以最终的结果应该是这样的:

Array
(
    [0][0] => 01
    [0][1] => 8

    [1][0] => 02
    [1][1] => 16  
    ...

)

基本上,目标是计算每个工作日一个月应包含多少小时。获得此信息后,可以将其与今天的日期进行比较,看看本月是否完成了工作时间。

非常欢迎任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以通过DateTime跟踪日期来实现您的目标之一:

$year = 2017;
$month = 1;

$date = (new Datetime())->setDate($year, $month, 1);

$days = [];
$hours = 0;

foreach (range(1, $date->format('t')) as $i) {

    $hours += $date->format('N') < 6 ? 8 : 0;

    $days[] = [
        'date'  => $date->format('d'),
        'hours' => $hours,
    ];

    $date->modify('+1 day');
}

这是正在发生的事情:

  1. DateTime设置为月初。
  2. foreach(range(...))只是写for($i=1;$i<=$date->format('t');$i++)的另一种方式。 t只会告诉你这个月的日子。
  3. $date->format('N') < 6检查星期几是否在星期六之前。如果是这样,将$hours计数增加8。
  4. 我认为其余的相当简单。
  5. 希望这有帮助!