2008-09-17 6 views

Antwort

3
 $datefrom = strtotime($datefrom, 0); 
     $dateto = strtotime($dateto, 0); 

     $difference = $dateto - $datefrom; 

     $days_difference = floor($difference/86400); 
     $weeks_difference = floor($days_difference/7); // Complete weeks 

     $first_day = date("w", $datefrom); 
     $days_remainder = floor($days_difference % 7); 

     $odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder? 
     if ($odd_days > 7) { // Sunday 
      $days_remainder--; 
     } 
     if ($odd_days > 6) { // Saturday 
      $days_remainder--; 
     } 

     $datediff = ($weeks_difference * 5) + $days_remainder; 

Von hier aus: http://www.addedbytes.com/php/php-datediff-function/

0

Eine Möglichkeit wäre, die Daten in die Unix-Zeitstempel umwandeln strtotime mit (...), um die Ergebnisse Subtrahieren und div'ing mit 86400 (24 * 60 * 60):

$dif_in_seconds = abs(strtotime($a) - strtotime($b)); 
$daysbetween = $dif_in_seconds/86400; 

ETA: Oh .. Sie meinten wochentags wie in Mon-Fr .. Habe das nicht zuerst gesehen.

+0

, dass alle Probleme einführen würde, die mit Unix-Zeitstempel kommen. Was passiert, wenn Sie ein Datum vor 1970 haben? – baudtack

+0

Die Lösung ist in bestimmten Problembereichen durchaus brauchbar. Aber natürlich hast du grundsätzlich Recht. Obwohl ich vermute, dass Sie sich bei den meisten heute geschriebenen Programmen keine Gedanken über die Unterschiede zwischen den Arbeitstagen in Zeiträumen vor 1970 machen würden. – erlando

+0

erlando, Wahrscheinlich nicht. Ich bin nur ein bisschen schüchtern von Unix-Zeitstempeln und vermeide sie wie die Pest heutzutage, weil ich gesehen habe, was passieren kann, wenn sie verwendet werden, Dinge zu repräsentieren, die sie nicht sollten. Wie Daten. Erstellt Zeitzonenprobleme. Ich denke, die Zeit ist böse und wir sollten einfach so tun, als wäre sie nicht da. :-p – baudtack

0

Der beste Weg ist, alle Daten zwischen dem angegebenen Datumsbereich zu durchlaufen und den Wochentag für jedes Datum zu erhalten . Wenn es ein Wochentag ist, erhöhen Sie einen bestimmten Zähler. Am Ende des Prozesses erhalten Sie die Anzahl der Wochentage.

Die PHP-Funktionen mktime() und date() (zum Arbeiten mit UNIX-Zeitstempeln) sind hier Ihre Freunde.

2

Falls Sie ein Abrechnungssystem erstellen, müssen Sie über die Feiertage denken, Ostern, etc. Es ist nicht einfach, es zu berechnen.

Die beste Lösung, die ich jemals gesehen habe, ist eine Tabelle mit Tagen und ihren Typ zu SQL-Datenbank (Zeile pro Tag = 365 Zeilen pro Jahr) vorgenerieren und dann einfache Count-Abfrage mit der richtigen Auswahl (WHERE-Klausel).

Sie diese Lösung vollständig beschrieben in Joe Celko Denken in Sets finden: Hilfs, Temporal und virtuelle Tabellen in SQL

+0

Wow, das ist eine ziemlich einzigartige Lösung für dieses Problem. Es ist nicht nur update-fähig, sondern skaliert wahrscheinlich auch gut. Tolle. Hut ab vor wem auch immer das kam. Ich habe unzählige Methoden und Algorithmen gescheitert gesehen, aber das klingt solide. – willasaywhat

Verwandte Themen