Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

577
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda