2016-03-31 6 views
0

У меня есть этот код, который я использовал на другом сайте, чтобы показать открытый и закрытый статус для магазина. Я использую его для другого магазина, который открыт прошлым или до полуночи. Из-за этого код считает, что магазин закрыт, поскольку он регистрирует время, как после закрытого времени, потому что это «00».Отображается открытое и закрытое уведомление за несколько часов до полуночи?

Вот код:

$todays_date = date("D"); 

if($todays_date == 'Fri' || $todays_date == 'Sat'){ 
    $open_hours = '2pm - 1am'; 
    $open = '14'; 
    $close = '01'; 
    $close_soon = '00'; 
} else { 
    $open_hours = '4pm - 12am'; 
    $open = '16'; 
    $close = '00'; 
    $close_soon = '23'; 
} 
$hour_now = date("H"); 

if($hour_now == $close_soon){ 
    $open_close_text = '<span style="color:#F60"><b>Closing Soon</b></span>'; 
} else { 

if($hour_now > $open && $hour_now < $close){ 
    $open_close_text = '<span style="color:#090"><b>Open Now</b></span>'; 
} else { 
    $open_close_text = '<span style="color:#F00"><b>Closed Now</b></span>'; 
} 
} 

Есть ли способ, чтобы исправить эту проблему? Я думаю, что у меня также возникнет проблема, когда день перейдет к Пэну после полуночи на Солнце, он будет казаться закрытым в полночь, но этого не должно произойти?

Спасибо.

+0

Да генерировать фактические даты и использовать встроенные функции сравнения. – user234461

ответ

1

Существует хороший ответ на этот подобный вопрос здесь: Determine If Business Is Open/Closed Based On Business Hours

И РНР класс здесь, на GitHub, который звучит, как он будет делать то, что вы после: https://github.com/coryetzkorn/php-store-hours


Если вы хотите Однако, чтобы сделать это самостоятельно, есть простой ответ (который не обрабатывает проблему с выходными/будничными деньгами) и более сложный ответ.

Простой ответ заключается в том, что вам нужно добавить логический блок, который будет распознаваться, когда время закрытия до времени открытия. Что-то вроде:

if ($open < $close) { 
    if($hour_now > $open && $hour_now < $close){ 
     $open_close_text = '<span style="color:#090"><b>Open Now</b></span>'; 
    } else { 
     $open_close_text = '<span style="color:#F00"><b>Closed Now</b></span>'; 
    } 
} else { 
    if($hour_now < $open && $hour_now > $close){ 
     $open_close_text = '<span style="color:#F00"><b>Closed Now</b></span>'; 
    } else { 
     $open_close_text = '<span style="color:#090"><b>Open Now</b></span>'; 
    } 
} 

Но это не решит проблему с выходными. Как уже упоминалось в комментариях, вам лучше использовать время, чтобы генерировать фактические временные метки, используя встроенную функцию PHP strtotime, и разрабатывать, что отображать оттуда.

Но на самом деле, это решаемая проблема - большинство вещей, которые вам нужно запрограммировать, уже были решены кем-то другим! Поэтому, если это не учебное упражнение, я рекомендую вам проверить существующие решения вверху.

+0

Спасибо за ответ, я бы чувствовал себя намного более комфортно, узнав, как это сделать с моими собственными письменными сценариями, а не с другими. Однако я посмотрю на ссылки и протестирую вышеуказанный скрипт. – Snappysites

+1

Не беспокойтесь, это хороший способ узнать! Как я уже сказал, это не поможет решить проблему с будними днями и выходными. То, что я рекомендую, заключается в том, что вы идете по пути определения «открытых» и «закрытых» точек, вместо того, чтобы делать это традиционным человеческим путем, так как в настоящий момент «закрытая» точка для субботы не на самом деле в субботу, это в воскресенье! Начните думать в течение 24 часов, и вы получите эту идею. – JoLoCo

Смежные вопросы