Margem de 2 horas em select

  • Autor Autor Antoniio1
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
Antoniio1

Antoniio1

Gamma
Verificación en dos pasos activada
Usuário com poucas negociações! Use sempre o saldo do 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.
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
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 edição:
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!!
 
Voltar
Topo