Citat:
Ursprungligen postat av Pate
I ditt exempel så kan du alltid loopa igenom $open_hours en gång till om $remaining_open_hours är 0 och då jämföra med morgondagens öppettider istället (glöm inte att kolla minuter också).
Ett tips är att använda DateTime::diff för att jämföra tid med PHP. Då slipper du räkna antal timmar som först återstår av dygnet samt hur många som är kvar till dygnet efter.
Gjorde ett snabbt exempel på funktionen (dock något annorlunda strukturerad):
|
Verkligen super schysst av dig att ge mig tips!
Jag löste det dock på detta sätt och det verkar fungera.
Har dock problem med om det är stängt i 1 eller 2 dagar att räkna ut tiden till nästa öppningsdag. Har du någon idé där som kan hjälpa?
PHP-kod:
if(empty($type)) $type = 'idag';
if ($type=='imorgon') {$modifier='+1day +1hours';} else {$modifier='+1hours';}
$weekdays = array(0=>'söndag',1=>'måndag',2=>'tisdag',3=>'onsdag',4=>'torsdag',5=>'fredag',6=>'lördag');
$today_date = gmdate("Y-m-d",strtotime($modifier));
$today_date_short = gmdate("d/n",strtotime($modifier));
$today_weekday = strftime("%w",strtotime($modifier));
if ($today_weekday=='5') {$day_type = 'fredag'; $next_day = 'lördag'; };
if ($today_weekday=='4') {$day_type = 'torsdag'; $next_day = 'fredag'; };
if ($today_weekday=='3') {$day_type = 'onsdag'; $next_day = 'torsdag'; };
if ($today_weekday=='2') {$day_type = 'tisdag'; $next_day = 'måndag'; };
if ($today_weekday=='1') {$day_type = 'måndag'; $next_day = 'tisdag'; };
if ($today_weekday=='0') {$day_type = 'söndag'; $next_day = 'måndag'; };
if ($today_weekday=='6') {$day_type = 'lördag'; $next_day = 'söndag'; };
$table_file = 'oppettider.txt';
$open_hours = ot_read_file($table_file,$department);
$table_file = 'oppettider_special.txt';
$open_hours_special = ot_read_file($table_file,$department);
switch($type) {
case 'idag':
foreach($open_hours as $row) {
if($day_type == $row[0]) {
if($row[1]!='Stängt') {
$output = '<strong>Idag:</strong> <span style="color: #e57f41;">Öppet</span> '. $row[1].'-'.$row[2];
} else {
$output = 'Idag har vi stängt';
}
}
}
break;
case 'imorgon':
foreach($open_hours as $row) {
if($day_type == $row[0]) {
if($row[1]!='Stängt') {
$output = '<strong>Imorgon:</strong> <span style="color: #e57f41;">Öppet</span> '. $row[1].'-'.$row[2];
} else {
$output = 'Imorgon har vi stängt';
}
}
}
break;
case 'aterstaende':
foreach($open_hours as $row) {
if($day_type == $row[0]) {
if($row[1]!='Stängt') {
foreach($open_hours as $row_next) {
if($next_day == $row_next[0]) {
$open_hour = $row_next[1];
}
}
$this_hour = intval(gmdate('G',strtotime('+0 hour')));
$close_hour = intval(substr($row[2],0,2));
$remaining_open_hours = $close_hour-$this_hour;
$close_min = strtotime($close_hour);
$diff_min = $close_min - time();
$sek_min = $diff_min % 60;
$min_min = ($diff_min / 60) % 60;
$min_min = $min_min + 60;
$hour = $remaining_open_hours - 1;
if ($remaining_open_hours == 1) {
$output = 'Har <span class="orange">öppet</span> i ytterligare '.$min_min.' minuter.';
}
elseif ($remaining_open_hours >= 2) {
$output = 'Har <span class="orange">öppet</span> i ytterligare '.$hour.' tim '.$min_min.' min.';
} else {
$open = strtotime($open_hour) + 24*60*60;
$diff = $open - (time() + (60*60));
$min = ($diff / 60) % 60;
$hour = ($diff / 3600);
$hour = floor($hour);
if($hour == 0){
$output = '<span class="orange">Öppnar</span> igen om '.$min.' minuter.';
}else{
$output = '<span class="orange">Öppnar</span> igen om '.$hour.' tim '.$min.' min.';
}
}
} else {
$output = 'b'; //idag har vi stängt
}
}
}
foreach($open_hours_special as $row) {
if($today_date_short == $row[0]) {
if($row[2]!='Stängt') {
$this_hour = intval(gmdate('G',strtotime('+1 hour')));
$close_hour = intval(substr($row[3],0,2));
$remaining_open_hours = $close_hour-$this_hour;
if ($remaining_open_hours>0) {
$output = '<strong>Idag:</Strong> '.$row[1].'<span style="color: #e57f41;">öppet</span> i c:a '.$remaining_open_hours.' timmar till';
} else {
$output = 'a';
}
} else {
$output = 'b';
}
}
}
break;