Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

580
Vistas
php store hours script, no puedo hacer que la medianoche funcione correctamente

Tengo este simple script php de horas de tienda.

Agrega el horario de apertura de la tienda en la matriz.

Luego lo repites en la página.

Sin embargo, tengo, por ejemplo, de 10:00 a. m. a 12:00 a. m. y rompe la lógica.

Se supone que dice ESTAMOS ABIERTOS... pero dice CERRADO.

Funciona para cualquier otro momento del día... pero a medianoche algo anda mal.

¿Por favor ayuda? Probablemente algo fácil que no estoy viendo.

 <?php date_default_timezone_set('America/New_York'); $storeSchedule = [ 'Monday' => ['10:00 AM' => '11:00 PM'], 'Tuesday' => ['10:00 AM' => '11:00 PM'], 'Wednesday' => ['10:00 AM' => '11:00 PM'], 'Thursday' => ['10:00 AM' => '11:00 PM'], 'Friday' => ['10:00 AM' => '12:00 AM'], 'Saturday' => ['10:00 AM' => '12:00 AM'], 'Sunday' => ['10:00 AM' => '11:00 PM'] ]; $timestamp = time(); $status = '<span style="color:#fc2323">Closed now</span>'; $currentTime = (new DateTime())->setTimestamp($timestamp); foreach ($storeSchedule[date('l', $timestamp)] as $startTime => $endTime) { $startTime = DateTime::createFromFormat('h:i A', $startTime); $endTime = DateTime::createFromFormat('h:i A', $endTime); if (($startTime < $currentTime) && ($currentTime < $endTime)) { $status = '<span style="color:#23fc41">OPEN</span>'; $todayIs = "owen"; break; } } echo '<p style="padding-bottom:5px;">Hours: ' . $status . '</p>'; foreach($storeSchedule[date('l', $timestamp)] as $openHour => $closeHour) { echo "<p style='padding-bottom:15px' class=\"show-store-hours\">" . date('l') . ": " . $openHour . " - " . $closeHour . " &#43;</p>"; } echo '<ul class="store-hours" style="margin: 0 auto; padding-bottom:25px">'; foreach ($storeSchedule as $storeDay => $hoursArray) { foreach ($hoursArray as $startTime => $endTime) { echo '<li>'; echo $storeDay; echo ': <span>'; echo $startTime; echo ' - '; echo $endTime; echo '</span></li>'; } } echo '<div class="clr"></div></ul>';

?>

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

¿Qué tal tratar de agregar 1 día a su hora de finalización, si la hora de finalización es la medianoche? Creo que está viendo este resultado porque la hora de la medianoche es literalmente menor que todas las horas de inicio. Por ejemplo, de 10 a. m. a medianoche del viernes es en realidad (en términos de tiempo) equivalente a 10 a. m. del viernes a 12 a. m. del sábado.

También hay otra solución. Puede publicar sus horas de cierre como 11:59:59 p. m. y mostrar esas horas hasta la medianoche.

Para arreglar tu hora de finalización, podrías hacer

if ($endtime < $starttime) { $endtime=date_add($endtime, INTERVAL 1 DAY);}

over 4 years ago · Santiago Trujillo Denunciar

0

No estoy seguro si esta es la mejor solución...

Pero esto funcionó para mí ... gracias por la ayuda.

 if ( $endTime == "11:59 PM" ) { $endTime = "12:00 AM"; }

Hago eco de esto en la página, después de que ya almacené el valor ABIERTO o CERRADO.

over 4 years ago · Santiago Trujillo Denunciar

0

Puede comenzar con una cadena de formato H:i para comparar los objetos de fecha y hora y luego volver a formatearlos en g:i A .

La diferencia es :

Medianoche como H:i

 $a = DateTime::createFromFormat('H:i', '24:00'); print_r($a);
 DateTime Object ( [date] => 2017-04-30 00:00:00.000000 [timezone_type] => 3 [timezone] => Asia/Dubai )

Medianoche como g:i A

 $a = DateTime::createFromFormat('g:i A', '12:00 AM'); print_r($a);
 DateTime Object ( [date] => 2017-04-29 00:00:00.000000 [timezone_type] => 3 [timezone] => Asia/Dubai )

Entonces, puedes hacer algo como:

 $a = DateTime::createFromFormat('H:i', '10:00'); $b = DateTime::createFromFormat('H:i', '24:00'); $c = new DateTime(); var_dump($c > $a && $c < $b);

booleano (verdadero)

Y para formatear el objeto dateTime de nuevo al formato "12:00 AM":

 print($b->format('g:i A'));

12:00 A.M

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda