2010-02-25 8 views

Répondre

3

manière la plus simple serait d'obtenir un horodatage qui correspond à nos jours, en utilisant la time() fonction ; et 7 fois supprimer 1 jour à cet horodatage, chaque écho à la date qui correspond à cet horodatage:

$timestamp = time(); 
for ($i = 0 ; $i < 7 ; $i++) { 
    echo date('Y-m-d', $timestamp) . '<br />'; 
    $timestamp -= 24 * 3600; 
} 

qui vous obtiendrez cette sortie:

2010-02-25 
2010-02-24 
2010-02-23 
2010-02-22 
2010-02-21 
2010-02-20 
2010-02-19 

Parce qu'un horodatage ne représente que le nombre de secondes depuis 1970-01-01, soustraire un jour à un horodatage signifie soustraire 24*3600 secondes.


Modifier après les commentaires:

Pour les changements de mois et semaines, cela fonctionne toujours: un jour est encore 24 * 3600 secondes.

Par exemple, si vous testez en utilisant cette ligne au lieu de la première que j'ai posté dans mon premier exemple:

$timestamp = strtotime('2010-02-03'); 

Vous obtiendrez cette sortie:

Il a changé du mois bien.


Pendant des années bissextiles, si je test en utilisant ceci:

$timestamp = strtotime('2008-03-03'); 

Je reçois:

2008-03-03 
2008-03-02 
2008-03-01 
2008-02-29 
2008-02-28 
2008-02-27 
2008-02-26 

Ce qui semble bien, car il y avait 29 jours en février 2008.

Et si je le test avec:

$timestamp = strtotime('2009-03-03'); 

je reçois:

2009-03-03 
2009-03-02 
2009-03-01 
2009-02-28 
2009-02-27 
2009-02-26 
2009-02-25 

Ce qui a l'air bien aussi.

+0

cela ne gérera pas les années bissextiles –

+0

et qu'en est-il du mois et de la semaine changent ...? –

+0

@Allain et @Anurag: J'ai édité mon post pour donner quelques autres exemples ;; avez-vous un cas spécifique dans lequel cela ne fonctionne pas? –

0

Pour générer l'horodatage de 00 heures pour les 10 derniers jours (y compris aujourd'hui) le code suivant fera:

<?php 
for ($i=0; $i<=10; $i++) { 
    echo mktime (0, 0, 0, date('m'), date('d')-$i, date('Y')); 
} 
?> 
+0

Traitera-t-il le changement de mois et de semaine Et qu'en est-il de l'année bissextile? –

2

Si vous êtes assez chanceux pour pouvoir jouer avec PHP 5.3 (pourquoi pas?) Alors les classes DateTime/Interval/ seront aussi exceptionnellement utiles. L'exemple suivant imprime les dates des 7 derniers jours (avec aujourd'hui) par rapport à aujourd'hui.

$start = new DateTime('-7 days', new DateTimeZone('UTC')); 
$period = new DatePeriod($start, new DateInterval('P1D'), 7); 

foreach ($period as $date) { 
    var_dump($date->format('D d-m-Y')); 
} 

qui sort quelque chose comme:

string(14) "Thu 18-02-2010" 
string(14) "Fri 19-02-2010" 
string(14) "Sat 20-02-2010" 
string(14) "Sun 21-02-2010" 
string(14) "Mon 22-02-2010" 
string(14) "Tue 23-02-2010" 
string(14) "Wed 24-02-2010" 
string(14) "Thu 25-02-2010" 

similaires peut être fait relativement facilement avec strtotime comme dans l'extrait ci-dessous (qui produit le même résultat que ci-dessus):

for ($i = 7; $i >= 0; $i--) { 
    var_dump(date('D d-m-Y', strtotime("-$i days"))); 
} 
Questions connexes