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