Kom ihåg mig?

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

Ämnesverktyg Visningsalternativ
Oläst 2012-03-05, 15:28 #1
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
Standard Hjälp med öppettider - Öppnar igen om x timmar

Jag har fått lite problem här. Jag önskar att kunna skriva ut
- "öppnar igen om 5 timmar"
- "öppet i ytterligare 3 timmar"

Öppet i ytterligare fixar jag ju som ni ser fast undrar hur jag ska lyckas få tag i nästkommande dags öppningstid.

Någon som har lust att hjälpa mig att tänka?



PHP-kod:
     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';
   if (
$today_weekday=='4'$day_type 'torsdag';
   if (
$today_weekday=='3'$day_type 'onsdag';
   if (
$today_weekday=='2'$day_type 'tisdag';
   if (
$today_weekday=='1'$day_type 'måndag';
   if (
$today_weekday=='0'$day_type 'söndag';
   if (
$today_weekday=='6'$day_type 'lördag';
 
 
   
$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 =  $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') {
                  
$this_hour intval(gmdate('G',strtotime('+1 hour')));
                  
$close_hour intval(substr($row[2],0,2));
                  
$remaining_open_hours $close_hour-$this_hour;
                  
                  if (
$remaining_open_hours>0) {
                     
$output 'Just nu: Öppet i ca '.$remaining_open_hours.' timmar  till.';   
                  } else {
                     
$output 'a';
 
                  }
                  
               } else {
                     
$output 'b';
               }
            }
         } 
bassan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-03-06, 19:42 #2
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 #3
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
Oläst 2012-03-07, 23:46 #4
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
Tycker du gör det lite onödigt svårt för dig med att räkna tid och datum själv, men hänger jag med i din logik (samt struktur på din källfil med öppettider) så kan en vanlig while loop användas.

Istället för att ställa in nästa dag, så använder du en while loop (eller en for-sats om du vill begränsa att kontrollera 7 dagar frammåt och sen ge upp) för att hämta ut ett datum och klockslag när butiken öppnar nästa gång.

Kika på do while samt for så lyckas du nog snart få till en fungerande lösning.
Pate är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-03-08, 00:13 #5
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Kan du inte säga vad du vill skall hända istället för att be om hjälp med din kod (som jag inte fattar mycket av).
Jake.Nu är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-03-08, 14:29 #6
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
Jag uppskattar mycket att ni tar er tid!

Jag ska nu försöka förklara mer noggrant hur mitt WP-plugin jobbar och vad jag vill uppnå.

Jag har två .txt filer en med ordinarie öppettider för mån-sön för respektive avdelning.

oppettider.txt
avd1,måndag,10.00,16.00
avd2,måndag,11.00,16.00
etc.

Sedan har jag ytterligare en .txt fil med udda öppettider.

oppettider_special.txt
avd1,24/12,stängt,julafton
avd2,24/12,stängt,julafton
avd1,25/12,stängt,juldagen
avd2,25/12,stängt,juldagen
avd1,26/12,stängt,annandagen
avd2,26/12,stängt,annandagen
etc.

Jag har alltså flera avdelningar med olika öppettiderna och även udda öppettider för röda dagar osv.

Jag kan hämta ut en öppettid renderOppettider('avd1','idag') eller kolla återstående tid genom att byta ut 'idag' till case 'aterstande' (vilken är den jag har problem med.)

---

Jag har alltså olika case scenarion: idag, imorgon, aterstande.
Det är återstående delen jag har problem med och behöver få fungerade.

Den ska visa endast minuter om det är endast öppet/stängt i ytterligare x-minuter.
Den ska visa timmar och minuter om det är >0 timmar kvar till öppning/stängning.

Den ska visa +48 timmar till öppning om det har passerat fredag stängning och avdelningen öppnar igen på nästkommande måndag.
Den ska även kunna visa +168h om det är te.x jullov (från oppettider_special.txt).

förstår ni mig bättre nu?

Senast redigerad av bassan den 2012-03-08 klockan 14:34
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)
 
Ämnesverktyg
Visningsalternativ

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 10:24.

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