在Laravel应用程序中发现了一个问题,英国时钟将继续进行。应用程序中的任何地方我们都使用碳,并将欧洲/伦敦设置为时区,但找到了一个使用gmdate((的位置。
。该方法循环通过范围循环,并在小时内创建一系列可用的时间段:分钟格式:
foreach ( range( $lower, $upper, $step ) as $increment ) {
$increment = gmdate( 'H:i', $increment );
list( $hour, $minutes ) = explode( ':', $increment );
$times[] = Carbon::createFromFormat('YmdHi', $day->format('Y') . $day->format('m') . $day->format('d') . $hour . $minutes);
}
我无法完全弄清楚Gmdate是如何从沿着以下线条的增量来创建该值的。
46800
48600
50400
52200
54000
55800
59400
可以做与gmdate((方法相同的,但使用碳?
谢谢!
您将UNIX时间戳传递给gmdate
,并要求以H:i
格式从该时间戳返回日期。Unix时间是...
[...]一种描述一个时间点的系统,定义为自00:00:00自1970年1月1日,星期四,自00:00:00协调通用时间(UTC(以来已经过去的秒数从那以后发生的几秒钟。
因此,46800
是1970-01-01下午1点,以H:i
格式为13:00
。
您的当前代码正在生成$lower
时间戳和$upper
Timestamp通过$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
之间每分钟的时间戳。然后,您的代码通过这些时间戳迭代,并将时间戳添加到格式YmdHi
的$times
数组中 - 我编写此评论的时间的YmdHi
格式是201803261300
。
碳具有用于增加时间的本机方法(addSeconds
,addMinutes
,addHours
等(,因此您可以使用这些方法,而不是进行所有这些工作来修改和生成时间。
您尚未包含您如何使用代码的示例,因此我将在此示例中猜测:
我想在2018-03-26 13:00和2018-03-26 14:00之间每5分钟
通过碳的实例,每个插槽的分钟和插槽数:
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);
我的首选是返回一系列碳实例(而不是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');
}