Wenn zwei Daten, was ist der beste Weg, um die Anzahl der Wochentage in PHP zu finden?

StackOverflow https://stackoverflow.com/questions/80541

  •  09-06-2019
  •  | 
  •  

Frage

Der Titel ist ziemlich selbsterklärend. Wenn zwei Daten, was ist der beste Weg, um die Anzahl der Wochentage zu finden, mit PHP? Wochentage sind Montag bis Freitag.

Zum Beispiel, wie würde ich herausfinden, dass es 10 Wochen Tage zwischen 31/08/2008 und 13/09/2008?

War es hilfreich?

Lösung

        $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: http://www.addedbytes.com/php/php -datediff-Funktion /

Andere Tipps

Wenn 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 je gesehen habe, ist eine Tabelle mit Tagen vorab generiert und seine Art zu SQL-Datenbank (Zeile pro Tag = 365 Zeilen pro Jahr) und dann einfache Zählung Abfrage mit dem richtigen Auswahl durchführt (WHERE-Klausel).

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

Eine Möglichkeit wäre, die Daten in der Unix-Zeitstempel konvertieren mit strtotime (...), 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 bedeutete Wochentage als in Mo-Fr .. Hat das zuerst nicht sehen ..

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

Die PHP-Funktionen mktime () und Datum () (für mit UNIX Zeitarbeits) sind Ihre Freunde hier.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top