[英]Create H:i value in Carbon from gmdate()
在Laravel應用中發現了一個問題,該問題與英國的時鍾有關。 在應用程序中的每個地方,我們都使用Carbon,並將歐洲/倫敦設置為時區,但是找到了一個使用gmdate()的位置。
該方法循環遍歷一個范圍,並以Hours:Minutes格式創建一個可用時隙數組:
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()方法相同的操作,但是用Carbon代替?
謝謝!
您要將unix時間戳傳遞給gmdate
並要求以H:i
格式從該時間戳返回日期。 Unix時間是...
用於描述時間點的系統,定義為自1970年1月1日(星期四)00:00:00協調世界時(UTC)以來經過的秒數,減去從那時起發生。
所以46800
是在1970-01-01這在下午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-03-26 13:00和2018-03-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');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.