2010-10-28 4 views

Répondre

9

Voici comment le faire d'une manière fraîche, avec grâce à l » relative formatsstrtotime spéciaux.

$friday = strtotime('Next Friday', time()); 
$saturday = strtotime('Next Saturday', time()); 
$friday = strtotime('+1 Week', $friday); 
$saturday = strtotime('+1 Week', $saturday); 

Bien sûr, vous devez modifier pour faire exactement ce que vous voulez, mais c'est à côté du point que je voulais faire.

Notez également que strtotime vous donnera des horodatages. Pour connaître l'utilisation de la date:

date('Y-m-d', $friday) 

Une autre chose à savoir est que Next <dayofweek> exclura votre journée en cours de la recherche, donc si vous voulez également inclure le jour courant, vous pouvez le faire comme ceci:


Et voici un script de travail complet qui fait exactement ce que vous vouliez.

<?php 
// prevent multiple calls by retrieving time once // 
$now = time(); 
$aYearLater = strtotime('+1 Year', $now); 

// fill this with dates // 
$allDates = Array(); 

// init with next friday and saturday // 
$friday = strtotime('Next Friday', strtotime('-1 Day', $now)); 
$saturday = strtotime('Next Saturday', strtotime('-1 Day', $now)); 

// keep adding days untill a year has passed // 
while(1){ 
    if($friday > $aYearLater) 
     break 1; 
    $allDates[] = date('Y-m-d', $friday); 
    if($saturday > $aYearLater) 
     break 1; 
    $allDates[] = date('Y-m-d', $saturday); 

    $friday = strtotime('+1 Week', $friday); 
    $saturday = strtotime('+1 Week', $saturday); 
} 

//XXX: debug 
var_dump($allDates); 

?> 

Bonne chance, Alin

+0

Benchmark: ~ 0.011s –

+0

Merci Alin, qui est juste est que je cherchais! Absolument brillant! – Ben

1
$secondsperday=86400; 

$firstdayofyear=mktime(12,0,0,1,1,2010); 
$lastdayofyear=mktime(12,0,0,12,31,2010); 

$theday = $firstdayofyear; 

for($theday=$firstdayofyear; $theday<=$lastdayofyear; $theday+=$secondsperday) { 
    $dayinfo=getdate($theday); 
    if($dayinfo['wday']==5 or $dayinfo['wday']==6) { 
     print $dayinfo['weekday'].' '.date('Y-m-d',$theday)."<br />"; 
    } 
} 
+1

Les calculs qui utilisent 86400 tiennent pour acquis que tous les jours ont 24 heures, ce qui n'est pas toujours le cas. Samedi prochain a 25 heures en Espagne en raison de l'heure d'été. –

+0

Benchmark: ~ 0.006s –

+0

Notez également que les règles de l'heure d'été varient considérablement à travers le monde. C'est pourquoi vous devez utiliser les fonctions de langage intégrées lors de la manipulation du temps. –

4

Avec les objets DateTime:

<?php 

define('FRIDAY', 5); 
define('SATURDAY', 6); 

$from = new DateTime; 
$to = new DateTime('+1 year'); 

for($date=clone $from; $date<$to; $date->modify('+1 day')){ 
    switch($date->format('w')){ 
     case FRIDAY: 
     case SATURDAY: 
      echo $date->format('r') . PHP_EOL; 
    } 
} 

Mise à jour: J'ai ajouté la partie $date=clone $from remarquer que les objets en PHP/5 ne sont plus copiés avec l'opérateur = mais référencé.

+0

Benchmark: ~ 0.006s –

1
$number_of_days_from_now = 365; 
    $now = time(); 

    $arr_days = array(); 

    $i = 0; 
    while($i <> $number_of_days_from_now){ 
     $str_stamp = "- $i day"; 
     $arr_days[] = date('Y-m-d',strtotime($str_stamp,$now)); 
     $i ++; 
    } 

    var_dump($arr_days); 

j'ai fait quelque chose de similaire à la réponse acceptée qui ne convenait me

Questions connexes