Kom ihåg mig?
Home Menu

Menu


Hjälp med öppettider - Öppnar igen om x timmar

 
Ämnesverktyg Visningsalternativ
Oläst 2012-03-06, 19:42 #1
Pate Pate är inte uppkopplad
Nykomling
 
Reg.datum: Dec 2009
Inlägg: 5
Pate Pate är inte uppkopplad
Nykomling
 
Reg.datum: Dec 2009
Inlägg: 5
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):

PHP-kod:

// Skapa Array med öppettider
$opening_hours = array(
    
=> array("08:30""17:30"), // Mån
    
=> array("08:30""17:30"), // Tis
    
=> array("08:30""17:30"), // Ons
    
=> array("08:30""17:30"), // Tors
    
=> array("08:30""17:30"), // Fre
    
=> array("08:30""17:30"), // Lör
    
=> array("08:30""17:30")  // Sön

);

// Ställ in dagens datum samt när butiken stänger
$currentDateTime = new DateTime();
$compareDateTime = new DateTime('today ' $opening_hours[intval(date('N'))][1]);

// Gör en kontroll om butiken är stängd först
if ($currentDateTime >= $compareDateTime) {
    
// Stängt idag, kolla hur länge som återstår till imorgon
    
$compareDateTime = new DateTime('tomorrow ' $opening_hours[intval(date('N'))][0]);
    
$remaining_hours $currentDateTime->diff($compareDateTime)->format('%h');
    echo 
"Butiken öppnar om ca " $remaining_hours " timmar";


// Butiken är fortfarande öppen
// Kontrollera om det är mindre än en timme kvar, visa då tiden i minuter istället
} elseif (intval($currentDateTime->diff($compareDateTime)->format('%h%I')) < 60) {
    
// Fortfarande öppet, stänger om mindre än en timme
    
$remaining_minutes $currentDateTime->diff($compareDateTime)->format('%i');
    echo 
"Butiken stänger om ca " $remaining_minutes " min";

// Mer än en timme kvar, så visar tiden i timmar
} else {
    
$remaining_hours $currentDateTime->diff($compareDateTime)->format('%h');
    echo 
"Butiken är öppen i ca " $remaining_hours " timmar till.";

Pate är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-03-07, 15:37 #2
bassan bassan är inte uppkopplad
Medlem
 
Reg.datum: May 2006
Inlägg: 84
bassan bassan är inte uppkopplad
Medlem
 
Reg.datum: May 2006
Inlägg: 84
Citat:
Ursprungligen postat av Pate Visa inlägg
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):

PHP-kod:

... 
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; 
bassan är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 17:58.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017