Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

578
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!