制定时间表的正确方法



我一直在争论是否使用 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;
}

这就是我要做的:

$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

好吧,代码的一个更优雅的方法是:

<?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说的,使用日期函数是必须的,现在做起来并不简单,我会尝试找出更好的方法;

最新更新