您将一个 unix 时间戳传递给 gmdate,并要求以 H:i 格式从该时间戳返回日期。 Unix 时间是...
[...] 用于描述时间点的系统,定义为自 1970 年 1 月 1 日星期四 00:00:00 协调世界时 (UTC) 以来经过的秒数减去闰秒数从那以后发生的秒数。
所以46800 是 1970 年 1 月 1 日下午 1 点,H:i 格式是 13:00。
您当前的代码正在生成$lower 时间戳和$upper 时间戳之间的时间戳范围,增量为$step,例如:
$lower = 0; // The epoch, 1970-01-01 00:00:00
$upper = 3600; // An hour of seconds later, 1970-01-01 01:00:00
$step = 60; // Increment by one minute (60 seconds)
$timestamps = range($lower, $upper, $step);
$timestamps 现在是一个数组,包含1970-01-01 00:00:00 和1970-01-01 01:00:00 之间每分钟的时间戳。然后您的代码将遍历这些时间戳中的每一个,并将时间戳添加到 $times 的数组中,格式为 YmdHi — 我写此评论时的 YmdHi 格式是 201803261300。
Carbon 具有用于增加时间的本机方法(addSeconds、addMinutes、addHours 等),因此您可以使用这些方法代替所有这些工作来修改和生成时间。
您还没有包含如何使用代码的示例,因此我将在以下位置猜测此示例:
我希望在 2018 年 3 月 26 日 13:00 和 2018 年 3 月 26 日 14:00 之间每 5 分钟一次
传入一个 Carbon 实例,每个槽的分钟数和槽数:
function generateTimeSlots(Carbon $time, integer $minutesPerSlot, integer $numberOfSlots) {
$slots = range(0, $numberOfSlots);
foreach ($slots as $k => $slot) {
$slots[$k] = $time->addMinutes($minutesPerSlot)->format('YmdHi');
}
return $slots;
}
$slots = generateTimeSlots(Carbon::now(), 5, 12);
另一种实现方式是传入开始时间和结束时间,例如:
function generateTimeslots(Carbon $start, Carbon $finish, integer $minutesPerSlot) {
$slots = [];
while ($start <= $finish) {
$slots[] = $start->addMinutes($minutesPerSlot)->format('YmdHi');
}
return $slots;
}
$slots = generateTimeslots(Carbon::now(), Carbon::now()->addHour(), 5);
我的偏好是返回 Carbon 实例数组(而不是 YmdHi 格式日期字符串数组),但您可能需要在系统的其他位置使用 YmdHi 格式时间戳。
虽然我看不到你的其余代码,但我猜你也可以这样做——我上面的回答让你更好地了解你将如何解决这个问题:
// $day appears to be a Carbon date instance defined elsewhere that represents the first time on the day on which the slots are to be generated
foreach ( range( $lower, $upper, $step ) as $increment ) {
$times[] = $day->addSeconds($step)->format('YmdHi');
}