2016-08-16 3 views
1

Ich habe diese Funktion, die ein Array von Datum zurückgeben. Ich muss alle sieben Tage von jetzt bis zum letzten Jahr aufspringen.PHP DateInterval

$date[] = $lastDate = (new \DateTIme('NOW'))->format('Y-m-d'); 

for ($i = 1; $i < 54; ++$i) { // 54 -> number of weeks in a year 
    $date[] = $lastDate = date('Y-m-d', strtotime('-7 day', strtotime($lastDate))); 
} 

return array_reverse($date); 

Es funktioniert, aber ich kann es besser machen. Ich möchte es ändern, weil für die Anzahl der Wochen in einem Jahr nicht sehr gut ist. (es kann sich ändern)

So möchte ich die DateInterval PHP-Klasse verwenden. Ich kann das Datum des letzten Jahres habe mit:

$lastYear = date('Y-m-d', strtotime('-1 year', strtotime($lastDate))); 

Aber ich weiß nicht, wie ich meinen Array mit allen meinen Daten mit der DateInterval Klasse haben kann.

Kann mir jemand helfen? Ich bin sehr schlecht mit Datum Manipulation :(...

Hier ist ein Beispiel-Array über das, was ich brauche:

["2015-07-06", "2015-07-13", "2015-07-20", "2015-07-27", "2015-08-03", "2015-08-10", "2015-08-17", "2015-08-24", "2015-08-31", "2015-09-07", "2015-09-14", "2015-09-21", "2015-09-28", "2015-10-05", "2015-10-12", "2015-10-19", "2015-10-26", "2015-11-02", "2015-11-09", "2015-11-16", "2015-11-23", "2015-11-30", "2015-12-07", "2015-12-14", "2015-12-21", "2015-12-28", "2016-01-04", "2016-01-11", "2016-01-18", "2016-01-25", "2016-02-01", "2016-02-08", "2016-02-15", "2016-02-22", "2016-02-29", "2016-03-07", "2016-03-14", "2016-03-21", "2016-03-28", "2016-04-04", "2016-04-11", "2016-04-18", "2016-04-25", "2016-05-02", "2016-05-09", "2016-05-16", "2016-05-23", "2016-05-30", "2016-06-06", "2016-06-13", "2016-06-20", "2016-06-27", "2016-07-04"] 
+0

Sie möchten die Anzahl der Woche dynamisch zählen, oder? –

+0

Ich suche nach der besten Lösung, um das zu tun. Aber ja, es war am Anfang meine Absicht. Aber wenn es einen besseren gibt, nehme ich es. – Kevin

+0

Mögliches Duplikat von [PHP - get letzte Woche Nummer im Jahr] (http://stackoverflow.com/questions/3319386/php-get-last-week-number-in-year) –

Antwort

2

PHP es hat seine eigene nativen DateInterval Objekt. Ist hier kurz Beispiel sa, wie es zu benutzen.

$oPeriodStart = new DateTime(); 
$oPeriodEnd = new DateTime('+12 months'); 

$oPeriod = new DatePeriod(
    $oPeriodStart, 
    DateInterval::createFromDateString('7 days'), 
    $oPeriodEnd 
); 

foreach ($oPeriod as $oInterval) { 
    var_dump($oInterval->format('Y-m-d)); 
} 

Also, was wir "hier getan haben? Für einen Zeitraum von d Sie benötigen ein Startdatum, ein Enddatum und das Intervall. Testen Sie es einfach selbst. Habe Spaß.

+0

Warum würden Sie 'strtotime()' verwenden, wenn Sie mit der 'DateTime' Klasse arbeiten? Was ist nicht in Ordnung mit 'neuer DateTime ('+ 12 Monate')'? –

+0

Ich wusste nicht, dass das funktionieren würde. Habe es bis jetzt noch nie getestet. Toller Hinweis Glavic! Vielen Dank. Ich werde meinen Beitrag bearbeiten. – Marcel

+1

Denken Sie daran, dass Sie, wenn Sie 'DateTime class' verwenden und sie mit der Funktion' date() 'oder' strtotime() 'mischen, ** etwas falsch machen **. Persönlich würde ich diese Funktionen ablehnen: D –

0

Try this:

$timestamp = strtotime("last Sunday"); 
$sundays = array(); 
$last_year_timestamp = strtotime("-1 year ",$timestamp); 

while($timestamp >= $last_year_timestamp) { 
    if (date("w", $timestamp) == 0) { 
     $sundays[] = date("Y-m-d", $timestamp); 
     $timestamp -= 86400*7; 
     continue; 
    } 
    $timestamp -= 86400; 
} 
+0

Danke. aber ich muss von jetzt an bis vor ein paar Jahren gehen. also muss ich das Datum 2015 haben. Entschuldigung für mein Englisch. Ich habe Schwierigkeiten zu erklären, was ich will ... – Kevin

+0

Und ist uns dieses vergangene Datum bekannt? Versuchen wir zum Beispiel, alle Sonntage zwischen heute und dem 1. November 2015 zu finden? –

+0

Ich habe meinen Beitrag aktualisiert, um Sie zu zeigen. Ich muss Schleife bis es am selben Tag des letzten Jahres geht – Kevin

Verwandte Themen