Ankündigung

Einklappen
Keine Ankündigung bisher.

Herausfinden ob eine Zeitspanne Wochenendtage enthält und wie viele

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Herausfinden ob eine Zeitspanne Wochenendtage enthält und wie viele

    Hallo,

    ich habe eine Zeitspanne (timestamp von und timestamp bis). Nun möchte ich ermitteln ob in dieser Spanne Wochenendtage (also SA oder SO, Feiertage) enthalten sind und wenn ja will ich diese von der Spanne abziehen. Lässt sich so etwas machen?

    Vielen Dank vorab

  • #2
    Ja ist es. Datums- und Zeitfunktionen im PHP Manual.
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    Kommentar


    • #3
      Hallo,

      folgende Funktionen sollten dir helfen:

      PHP-Code:
      // Errechnet das Datum des Ostersonntags für ein gegebenes Jahr
      function easter($year) {
          if(
      $year 2038 || $year 1970) {
              return 
      false;
          } else {
              
      $a $year 19;
              
      $b $year 4;
              
      $c $year 7;
              
      $m = ((* ($year 100) + 13) / 25) - 2;
              
      $s = ($year 100) - ($year 400) - 2;
              
      $M = (15 $s $m) % 30;
              
      $N = ($s) % 7;
              
      $d = ($M 19 $a) % 30;
              if (
      $d == 29) {
                  
      $D 28;
              } elseif (
      $d == 28 && $a >= 11) {
                  
      $D 27;
              } else {
                  
      $D $d;
              }
              
      $e = ($b $c $D $N) % 7;
              
      $delta $D $e 1;
              
      $easter gmmktime(000321$year) + $delta * (24 3600);
              return 
      $easter;
          }
      }  



      // Beseitigt Stundenanteile in einem UNIX-Zeitstempel
      function ResetHours(&$timestamp) {
          
      $hour date('G'$timestamp);
          
      $timestamp -= ($hour 3600);
      }
      function 
      ResetHour($timestamp) {
          
      $hour date('G'$timestamp);
          
      $timestamp -= ($hour 3600);
          return 
      $timestamp;
      }  

      // Berechnet alle festen und variablen Feiertage eines gegebenen Jahrs.
      // Die Feiertage werden als Array zurückgeliefert, wobei der Key dem
      // Feiertagsnamen entspricht und der Wert dem entsprechenden Zeitstempel.
      function Feiertage($year) {
          
      $OneDay 24 60 60;
          
      $easter easter($year);
          if(!
      $easter) {
              return 
      false;
          } else {
              
      $advday date('w'gmmktime(0001126$year));
              
      $advent gmmktime(0001126$year) + (($advday == $advday) * $OneDay);
              
      $holidays['Neujahr']                   = gmmktime(000,  1,  1$year);
              
      $holidays['Heilige Drei Könige']       = gmmktime(000,  1,  6$year);
              
      $holidays['Rosenmontag']               = $easter - (48 $OneDay);
              
      $holidays['Fastnacht']                 = $easter - (47 $OneDay);
              
      $holidays['Aschermittwoch']            = $easter - (46 $OneDay);
              
      $holidays['Karfreitag']                = $easter - ($OneDay);
              
      $holidays['Ostersonntag']              = $easter;
              
      $holidays['Ostermontag']               = $easter + ($OneDay);
              
      $holidays['Tag der Arbeit']            = gmmktime(000,  5,  1$year);
              
      $holidays['Christi Himmelfahrt']       = $easter + (39 $OneDay);
              
      $holidays['Pfingstsonntag']            = $easter + (49 $OneDay);
              
      $holidays['Pfingstmontag']             = $easter + (50 $OneDay);
              
      $holidays['Fronleichnam']              = $easter + (60 $OneDay);
              
      $holidays['Mariä Himmelfahrt']         = gmmktime(000,  815$year);
              
      $holidays['Tag der deutschen Einheit'] = gmmktime(00010,  3$year);
              
      $holidays['Reformationstag']           = gmmktime(0001031$year);
              
      $holidays['Allerheiligen']             = gmmktime(00011,  1$year);
              
      $holidays['Buß- und Bettag']           = $advent - (11 $OneDay);
              
      $holidays['1. Advent']                 = $advent;
              
      $holidays['2. Advent']                 = $advent + ($OneDay);
              
      $holidays['3. Advent']                 = $advent + (14 $OneDay);
              
      $holidays['4. Advent']                 = $advent + (21 $OneDay);
              
      $holidays['Heiligabend']               = gmmktime(0001224$year);
              
      $holidays['1. Weihnachtsfeiertag']     = gmmktime(0001225$year);
              
      $holidays['2. weihnachtsfeiertag']     = gmmktime(0001226$year);
              
      $holidays['Silvester']                 = gmmktime(0001231$year);
              
      array_walk($holidays'ResetHours');
              return 
      $holidays;
          }

      Diese Funktionen stammen NICHT von mir, habe sie vor längerem selbst "ergoogelt" und in meine Sammlung aufgenommen.
      Leider kenne ich die Quelle nicht mehr...

      Um den Wochentag eines Datums zu bestimmen:
      PHP-Code:
      $wochentage = array("SO""MO""DI""MI""DO""FR""SA");
      $tag date("w"$datum);
      $wochentag wochentage[$tag]; 
      Du solltest also in einer Schleife vom Anfangstag jeweils +1 Tag bis zum Enddatum hinzuzählen, mit den von mir genannten Funktionen überprüfen ob es sich um einen Feiertag (in_array)/Wochenendtag handelt und einen Counter erhöhen (oder eben nicht...) um dessen Summe dann von der Anzahl der Tage zw. den Daten abzuziehen.

      Kommentar

      Lädt...
      X