2010-09-24 5 views
0

J'essaye de construire une fonction php qui retournerait un tableau avec la date de début et la date de fin du dernier nombre de semaines. cela inclurait la semaine en cours. Il ressemblerait à quelque chose comme ceci:fonction php pour obtenir les dates des 7 dernières semaines

function lastnweeks(n) 
{ 
//the code. I am not asking for the code itself but ideas on how to accomplish this 
return $array; 
} 
$lastnweeks =lastnweeks(2); 
print_r($lastnweeks); 

ce imprimerait:

Array ( 
    [0] => Array ( 
     [0] => 2010/09/20 
     [1] => 2010/09/26 
    )[1] => Array ( 
     [0] => 2010/09/13 
     [1] => 2010/09/19 
)) 

Répondre

0

Utilisez strtotime pour obtenir le lundi et soustraire le nombre de secondes pour chaque semaine:

function lastnweeks($n) { 
    $time = strtotime('Monday 00:00:00+0000'); 
    $arr = array(); 
    while ($n-- > 0) { 
     $arr[] = array_reverse(array(
      date('Y/m/d', $time-=86400), // sunday 
      date('Y/m/d', $time-=6*86400) // monday 
     )); 
    } 
    return $arr; 
} 

array_reverse est utilisé pour inverser le tableau lorsque le calcul recule.

+0

Merci, cela est très utile –

0

Faites votre choix

$last_week = strtotime('last Week'); 
echo "Last Week ".date("Y/m/d", $last_week)."<br />\n"; 

ou

$last_week = mktime(0,0,0,date("m"),date("d")-7,date("Y")); 
echo "Last Week ".date("Y/m/d", $last_week)."<br />\n"; 
2

Je ne voudrais pas utiliser un nombre absolu de secondes en raison de l'heure d'leapyears jour et/leapseconds. Vous pouvez laisser la fonction strtotime() de PHP prendre soin de cela pour vous en utilisant des dates relatives. À chaque itération d'une boucle, vous pouvez simplement dire à la fonction de trouver «Dernier lundi», puis utiliser ce résultat comme point de départ pour l'itération suivante.

Le code:

$past_weeks = 7; 
$relative_time = time(); 
$weeks = array(); 

for($week_count=0;$week_count<$past_weeks;$week_count++) { 
    $monday = strtotime("last Monday", $relative_time); 
    $sunday = strtotime("Sunday", $monday); 
    $weeks[] = array(
     date("Y-m-d", $monday), 
     date("Y-m-d", $sunday), 
    ); 
    $relative_time = $monday; 
} 

var_dump($weeks); 

La sortie:

array 
    0 => 
    array 
     0 => string '2010-09-20' (length=10) 
     1 => string '2010-09-26' (length=10) 
    1 => 
    array 
     0 => string '2010-09-13' (length=10) 
     1 => string '2010-09-19' (length=10) 
    2 => 
    array 
     0 => string '2010-09-06' (length=10) 
     1 => string '2010-09-12' (length=10) 
    3 => 
    array 
     0 => string '2010-08-30' (length=10) 
     1 => string '2010-09-05' (length=10) 
    4 => 
    array 
     0 => string '2010-08-23' (length=10) 
     1 => string '2010-08-29' (length=10) 
    5 => 
    array 
     0 => string '2010-08-16' (length=10) 
     1 => string '2010-08-22' (length=10) 
    6 => 
    array 
     0 => string '2010-08-09' (length=10) 
     1 => string '2010-08-15' (length=10) 
Questions connexes