2009-08-24 12 views

Répondre

5

Qu'en est-il quelque chose comme ceci:

$date = strtotime('2009-01-01 next sunday'); 
$dateMax = strtotime('2009-02-23'); 

$nbr = 0; 
while ($date < $dateMax) { 
    var_dump(date('Y-m-d', $date)); 
    $nbr++; 
    $date += 7 * 24 * 3600; 
} 

var_dump($nbr); 

Et le ouput vous obtenez est:

string '2009-01-04' (length=10) 
string '2009-01-11' (length=10) 
string '2009-01-18' (length=10) 
string '2009-01-25' (length=10) 
string '2009-02-01' (length=10) 
string '2009-02-08' (length=10) 
string '2009-02-15' (length=10) 
string '2009-02-22' (length=10) 

Pour les dates de chaque dimanche, et:

int 8 

Pour le nombre des dimanches

(je l'ai vérifié rapidement, et il semble que ces dates sont en effet sundays)


Qu'est-ce que ce code est de:

  • d'abord, obtenir la date du premier dimanche après 2009-01 -01
  • puis, tant que la date actuelle est avant 2009-02-23, itérer
  • à chaque itération, ajouter 7 * 24 * 3600 secondes (7 jours par semaine, 24 heures par jour, 3600 secondes par heure)

Remarque: J'ai changé le format de vos dates, pour utiliser AAAA-MM-JJ, et non JJ-MM-AAAA; c'est le format qui est généralement utilisé - donc, probablement une bonne idée d'utiliser celui-ci, pour être sûr que strtotime fonctionne correctement. (pas sûr que cela fonctionnera bien avec votre format)

+0

si mon (Date du Maximum $) jour de fin est un dimanche, alors il affichera réponse incorrecte :( – coderex

+0

Si vous souhaitez inclure la Date du Maximum $, et ne pas exclure, en utilisant <= au lieu de stricte < dans la condition de la boucle while pourrait aider –

0

Vous pouvez calculer combien de semaines se trouvent entre ces deux dates, il devrait y avoir une bibliothèque de manipulation de date en PHP, puis le nombre de dimanches sera le nombre de semaines, vous aurez toujours besoin de voir si la première date est un dimanche ou non, et la dernière date est un dimanche ou ne pas traiter les bords de la plage de dates.

On peut voir quelques exemples here.

2

Cela devrait faire l'affaire sans aucune boucle.

$start = mktime(0, 0, 0, $start_month, $start_day, $start_year); 
$end = mktime(0, 0, 0, $end_month, $end_day, $end_year); 
$days = ($end - $start)/86400; 
$sundays = $days/7 

// check if there are enough leftover days for one more sunday 
if((localtime($start)[6]+($days % 7) > 6) 
    $sundays++; 
0

J'ai vu cela quelque part ici dans SO et je l'ai utilisé dans mon projet. Impossible de retrouver le message d'origine.

// function to calculate number of given day within date range 
function number_of_days($day, $start, $end){ 
    $w = array(date('w', $start), date('w', $end)); 
    return floor((date('z', $end) - date('z', $start))/7) + ($day == $w[0] || $day == $w[1] || $day < ((7 + $w[1] - $w[0]) % 7)); 
} 

// define your dates 
$start = mktime(0, 0, 0, 1, 16, 2010); 
$end = mktime(0, 0, 0, 1, 25, 2010); 

// display the count 
echo number_of_days(0, $start, $end); 
+0

Cela ne fonctionne pas à travers les années et donne parfois des résultats erronés .. – ricricucit

+0

Ceci est le post original: http://stackoverflow.com/a/1654008/157873 (déjà fixé) – w35l3y

1
 $sunday=0; 
     for($i=1; $i<=date("t", strtotime("2012-09-01")); $i++) { 
      if(date("l", strtotime("2012-09-".$i)) === 'Sunday') { 
       $sunday++; 
      }  
     } 
     echo "no of Sunday=".$sunday; 
+0

Pouvez-vous donne une explication avec ta réponse? –

Questions connexes