制定时间表的正确方法

时间:2017-06-21 15:22:55

标签: php date

我一直在讨论是否使用Date函数,或者只是在我的代码读起来的时候,是否有更简洁的方法来制作给定日期的数组;

 function emptySchedule()
    {
        $emptySchedule = [];
        for ($h = 0; $h < 24; ++$h) {
            for ($m = 0; $m < 60; ++$m) {
                $emptySchedule[str_pad($h, 2, '0', STR_PAD_LEFT).':'.str_pad($m, 2, '0', STR_PAD_LEFT)] = [];
            }
        }

        return $emptySchedule;
    }

但它只是感觉,是否有更好的方法来获得相同的结果,或者更好的方式来处理日期对象中的会议记录,甚至更好的全球接受正确方式?我宁愿不使用包装,但如果有一个好的包装,我愿意接受它。

修改;在某些情况下,我将把数组放入当天的每一分钟。

EDIT2 :出于将要使用的目的,不需要任何输入,我的最终功能是;

public function emptySchedule()
{
    $startDate = date_create("today"); //Any start date works
    $endDate = date_create("tomorrow"); //Any end date works
    $step = new \DateInterval("PT1M"); //1 minute, can change
    $date = $startDate;
    $times = [];
    while ($date <= $endDate) {
        $times[$date->format("H:i")] =  [];
        $date = $date->add($step);
    }

    return $times;
}

2 个答案:

答案 0 :(得分:1)

嗯,您的代码更优雅的方法是:

<?php
function emptySchedule($hoursInit = date('G'), $hoursActive = 24)
    {
        $emptySchedule = [];
        for ($h = $hoursInit; $h < $hoursActive; ++$h) {
           for ($m = 0; $m < 60; ++$m) {
             $emptySchedule[sprintf('%02d:%02d', $h, $m)] = [];
           }  
        }

        return $emptySchedule;
}

您也可以使用间隔,在您的日程安排和午餐时间工作:

<?php
function emptySchedule($hoursInit = date('G'), $hoursActive = 24, $interval = false)
    {
        $emptySchedule = [];
        for ($h = $hoursInit; $h < $hoursActive; ++$h) {
            if ($interval && ($h < $interval['start'] || $h > $interval['end'])) {
              for ($m = 0; $m < 60; ++$m) {
                $emptySchedule[sprintf('%02d:%02d', $h, $m)] = [];
              }
            }

        }

        return $emptySchedule;
}

但是,就像@deceze所说,使用日期函数是必须的,现在做起来并不简单,我会尝试找出更好的方法;

答案 1 :(得分:1)

这就是我要做的事情:

$startDate = date_create("today"); //Any start date works
$endDate = date_create("tomorrow"); //Any end date works
$step = new DateInterval("PT1M"); //1 minute, can change
$date = $startDate;
$times = [];
while ($date <= $endDate) {
      $times[$date->format("H:i")] =  [];
      $date = $date->add($step);
}

print_r($times);

http://sandbox.onlinephpfunctions.com/code/dd91a8f3f1707ca20aae93f70969275d5fb8dedd