Margen de 2 horas en select

  • Autor Autor Antoniio1
  • Fecha de inicio Fecha de inicio
Antoniio1

Antoniio1

Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola, tengo un select para dar una opción de horas, es el siguiente:
PHP:
<label for="hour_delivery">Hora de Entrega</label>
                <select class="form-control input-lg" id="hour_delivery" name="hour_delivery">
                    <option value="">Selecciona Hora de Entrega</option>
                    @for( $he = 7.5; $he < 17; $he+=2 )

                        @php
                            
                            if( strpos( ( string )$he, "." ) !== false ){
                            
                                $heArray = explode( ".", ( string )$he );

                                if( $heArray[0] < 10 ){

                                    $heTimeInit = "0" . $heArray[0] . ":30";
                                }
                                else{

                                    $heTimeInit = $heArray[0] . ":30";
                                }
                                
                                $heTimeEnd = ( $heArray[0] + 1 ) . ":00";
                            }
                            else{

                                if( $he < 10 ){

                                    $heTimeInit = "0" . $he . ":00";
                                }
                                else{

                                    $heTimeInit = $he . ":00";
                                }

                                $heTimeEnd = $he . ":30";
                            }
                        @endphp

                        <option value="{{ $heTimeInit }}">{{ $heTimeInit . ' - ' . $heTimeEnd }}</option>
                    @endfor
                </select>

Pero eso hace que quede así:
7:30 - 8:00
9:30 - 10:00
11:30 - 12:00
13:30 - 14:00
15:30 - 16:00

¿Cómo puedo hacer para darle un margen de dos horas?, y que las opciones aparezcan así:

8:00- 10:00
9:00 - 11:00
10:00 - 12:00
11:00 - 13:00
12:00 - 14:00
13:00 - 15:00
14:00 - 16:00
15:00 - 17:00


La idea es cubrir desde la hora de apertura (8:00) hasta el cierre (17:00) dando márgenes de dos horas como lo puse.

Alguna sugerencia para modificar?

Saludos.
 
PHP:
<?php

$begin = new DateTime('8:00');
$end = new DateTime('15:00');
$end = $end->modify('+1 hour');
$interval = new DateInterval('PT1H');
$margin = '+2 hour';

$dateRange = new DatePeriod($begin, $interval ,$end);
?>
<br><br>
<select style="width:150px">
<?
foreach($dateRange AS $date)
    echo '<option value="'.$date->format('H:i').'">'.$date->format('H:i').' - '.$date->modify($margin)->format('H:i').'</option>'
;
?>
</select>

Prueba este código. 👍
 
Última edición:
Disculpa, a penas voy comenzando a aprender php y me quedan dudas. Si sustituyo el código que ya tengo por el que me mandaste, ya no se guardarán los datos en la bd porque cuando selecciona la hora, esa se imprime en el admin para ver a que hora se entrega el pedido.
 
Disculpa, a penas voy comenzando a aprender php y me quedan dudas. Si sustituyo el código que ya tengo por el que me mandaste, ya no se guardarán los datos en la bd porque cuando selecciona la hora, esa se imprime en el admin para ver a que hora se entrega el pedido.

Intenta "fusionarlos".
Ponle el mismo nombre, id, etc..
Fíjate que envía en value el que vos hiciste con el que te pasé, ve en que difieren y acomodalo.
 
Intenta "fusionarlos".
Ponle el mismo nombre, id, etc..
Fíjate que envía en value el que vos hiciste con el que te pasé, ve en que difieren y acomodalo.
De acuerdo, ya ando en eso!, gracias!!
 
Atrás
Arriba