Le titre est assez explicite. Compte tenu de deux dates, quelle est la meilleure façon de trouver le nombre de jours de la semaine en utilisant PHP? Les jours de la semaine étant du lundi au vendredi. Par exemple, comment trouverais-je qu'il y a 10 jours de semaine entre 31/08/2008
et 13/09/2008
?Étant donné deux dates quelle est la meilleure façon de trouver le nombre de jours de la semaine en PHP?
Répondre
$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;
Une façon serait de convertir les dates pour timestamp unix en utilisant strtotime (...), en soustrayant les résultats et div'ing avec 86400 (24 * 60 * 60):
$dif_in_seconds = abs(strtotime($a) - strtotime($b));
$daysbetween = $dif_in_seconds/86400;
ETA: Oh .. Vous vouliez dire les jours de la semaine comme du lundi au vendredi .. Vous ne l'avez pas vu au début ..
Le meilleur moyen est de parcourir toutes les dates entre les dates indiquées et d'obtenir le jour de la semaine pour chaque date . Si c'est un jour de semaine, incrémenter 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.
Si vous créez un système de facturation, vous devez penser à les jours fériés, Pâques, etc. Il n'est pas simple à calculer.
La meilleure solution que j'ai jamais vue est de pré-générer une table avec des jours et son type à base de données SQL (ligne par jour = 365 lignes par an) et ensuite effectuer une requête simple.
Vous pouvez trouver cette solution entièrement décrite dans la pensée de Joe Celko dans Ensembles: auxiliaire, temporelle et tableaux virtuels dans SQL
Wow, c'est une solution plutôt unique à ce problème. Il est non seulement évolutif, mais il évolue aussi bien. Incroyable. Bravo à celui qui est venu avec ça. J'ai vu d'innombrables méthodes et algorithmes échouer, mais cela semble solide. – willasaywhat
- 1. Quelle est la meilleure façon de trouver l'inverse de datetime.isocalendar()?
- 2. Trouver les jours de la semaine dans une plage de dates en utilisant Oracle SQL
- 3. calcul de la semaine MySQL entre deux dates
- 4. Quelle est la meilleure façon de diviser deux objets TimeSpan?
- 5. Quelle est la meilleure façon de calculer la différence de date en Javascript
- 6. Convertir un nombre entier en une liste de jours de la semaine
- 7. Quelle est la (meilleure) façon de gérer les dates avant le Christ en C# /. NET?
- 8. Obtenir le nombre de certains jours-de-la-semaine (week-end) à partir de l'intervalle dans PostgreSQL
- 9. Quelle est la meilleure façon de créer des vignettes à partir de la vidéo en PHP?
- 10. Quelle est la meilleure façon d'utiliser l'API Twitter via PHP?
- 11. Quelle est la meilleure façon de faire ce programme Java?
- 12. Quelle est la meilleure façon d'interroger le nombre de lignes à partir des données de base?
- 13. Quelle est la meilleure façon de détecter si un objet Javascript donné est un élément DOM?
- 14. Quelle est la meilleure façon de trouver le type correspondant le plus proche d'un type existant?
- 15. Quelle est la bonne façon d'obtenir la date de début et de fin d'un numéro de semaine ISO dans TSQL?
- 16. Quelle est la meilleure façon d'automatiser le remplacement de texte?
- 17. Quelle est la meilleure façon de trouver et de remplacer le code "! = Null" avec andand?
- 18. Quelle est la meilleure façon de normaliser le "temps" en PHP?
- 19. Quelle est la meilleure façon de sélectionner les lignes des 7 derniers jours?
- 20. Quelle est la meilleure façon de contextualiser un grand nombre de définitions de style Css?
- 21. Quelle est la meilleure façon de déboguer un écrasement explorer.exe?
- 22. Quelle est la meilleure façon de formater C# dans WordPress?
- 23. Quelle est la meilleure façon de stocker des variables de classe en PHP?
- 24. Quelle est la meilleure façon de gérer un mauvais lien donné à BeautifulSoup?
- 25. Quelle est la meilleure façon de mettre en cache des fichiers en php?
- 26. Quelle est la meilleure façon de surveiller un grand nombre de processus Ruby?
- 27. Quelle est la meilleure façon de trouver à quelle bibliothèque une fonction peut appartenir?
- 28. Quelle est la meilleure façon de gérer un grand nombre de tables dans MS SQL Server?
- 29. Quelle est la meilleure façon de déboguer un Oracle SP?
- 30. Quelle est la meilleure façon d'emballer le temps autour de la journée de travail?
Ce introduirait tous les problèmes qui viennent avec timestamp unix. Que se passe-t-il si vous avez une date antérieure à 1970? – baudtack
La solution est parfaitement viable compte tenu de certains domaines de problème. Mais bien sûr, vous avez raison en principe. Bien que je soupçonne que pour la majorité des programmes écrits aujourd'hui, vous ne vous inquiéteriez pas des différences de jours de travail avant 1970. – erlando
erlando, Probablement pas. Je suis juste un peu timide des timestamps Unix et les évite comme la peste de nos jours, parce que j'ai vu ce qui peut arriver quand ils sont utilisés pour représenter des choses qu'ils ne devraient pas. Comme les dates. Crée des problèmes de fuseau horaire. Je pense que le temps est mauvais et nous devrions juste prétendre qu'il n'est pas là. :-p – baudtack