Étant donné deux dates, quel est le meilleur moyen de connaître le nombre de jours de la semaine en PHP?

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

  •  09-06-2019
  •  | 
  •  

Question

Le titre est assez explicite. Étant donné deux dates, quel est le meilleur moyen de connaître le nombre de jours de la semaine utilisant PHP? Les jours de la semaine étant du lundi au vendredi.

Par exemple, comment pourrais-je savoir qu'il y a 10 jours de semaine entre 31/08/2008 et 13/09/2008 ?

Était-ce utile?

La solution

        $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;

À partir d'ici: http://www.addedbytes.com/php/php -datediff-function /

Autres conseils

Si vous créez un système de facturation, vous devez penser aux jours fériés, à Pâques, etc. Il n’est pas simple de le calculer.

La meilleure solution que j'ai jamais vue consiste à prégénérer une table avec les jours et son type dans une base de données SQL (ligne par jour = 365 lignes par an), puis d'effectuer une requête de comptage simple avec la sélection appropriée (clause WHERE).

Cette solution est décrite en détail dans La pensée en ensembles de Joe Celko: Tables auxiliaires, temporelles et virtuelles en SQL

Une solution serait de convertir les dates en timestamps Unix en utilisant strtotime (...), en soustrayant les résultats et en divisant avec 86400 (24 * 60 * 60):

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

ETA: Oh .. Vous vouliez dire en semaine comme lundi-vendredi .. Je n'ai pas vu ça au début ..

La meilleure façon de procéder consiste à parcourir toutes les dates comprises dans l'intervalle de dates donné et à obtenir le jour de la semaine pour chaque date. Si c'est un jour de semaine, incrémentez un certain compteur. À la fin du processus, vous obtenez le nombre de jours de la semaine.

Les fonctions PHP mktime () et date () (pour travailler avec les horodatages UNIX) sont vos amis ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top