2016-08-09 407 views
1

PHPs strtotime() verwendet standardmäßig das aktuelle Jahr. Wie bekomme ich nur zukünftige Termine?Nur zukünftige Daten mit PHP strtotime()

echo date('l d. M Y', strtotime('first sunday of april')); // Sunday 03. Apr 2016 

Ich kann den nächsten ersten Sonntag im April bekommen verwalten. Das Datum darf nicht in der Vergangenheit liegen und muss immer relativ sein (nicht 2017 oder 2018 fest codiert).

echo date('l d. M Y', strtotime('first sunday of next april')); // fails 

echo date('l d. M Y', strtotime('first sunday of april next year')); // wrong from January until that Sunday in April 

Ich glaube, ich es in mehreren Schritten tun könnte oder eine Funktion erstellen, um zu überprüfen, wenn die aktuelle Zeit vor/nach dem ersten Sonntag ist und fügen Sie ein, im nächsten Jahr am Ende.

Aber ich frage mich, ob es eine einfache Lösung mit strtotime ist()

+1

StrTotime kann manchmal magisch scheinen, aber es ist keine AI und nicht Omnisci ent. Wenn es nicht analysieren kann, was Sie ihm zuführen, müssen Sie es manchmal nur an der Nase führen und einen Basiszeitstempel mit dem optionalen zweiten Argument, z. Stellen Sie "jan 1 2017" als Basiszeit zur Verfügung –

+0

Das ist ein guter Punkt, aber ich denke, es funktioniert nicht gut in meiner Situation, weil Sie nicht einfach das Stichwort "dieses Jahr" oder "nächstes Jahr" weglassen können. Wie auch immer, du hast Recht ... es gibt Platz für die PHP-Leute, die mehr Pixie-Staub hinzufügen :-) – suntrop

Antwort

3

Ich denke nicht, das besonders elegant ist, aber es funktioniert, und ich hoffe, es ist das, was Sie suchen?

echo date('l d. M Y', strtotime('first sunday of april', strtotime('first day of next year'))); 

Allerdings scheint dies wie ein viel besser, wartbar, gut lesbare Lösung

$d = new DateTime(); 
$d->modify('first day of next year'); 
echo $d->format('l d. M Y') . PHP_EOL; 
$d->modify('first sunday of april'); 
echo $d->format('l d. M Y') . PHP_EOL; 

Welche

Tuesday 01. Aug 2017 
Sunday 02. Apr 2017 

Das Echo des Jahres Änderungsdatum gibt, würden Sie nicht tun müssen, es gibt nur zu beweisen, dass das Jahr geändert

+0

Cudos wegen @Mitkosoft, da ich im Grunde nur meine Änderungen an der DateTime-Klasse anwandte, die seine Antwort vorschlug, aber die Notwendigkeit für ein Hard löste kodiertes Jahr. Hoffe das beleidigt dich nicht mitko – RiggsFolly

+0

Danke Jungs! Ich gehe mit etwas wie ... (Datum ('m') <7)? strtotime ("erster Sonntag im Juni dieses Jahres - 1 Tag 10 Uhr"): strtotime ("erster Sonntag im Juni nächstes Jahr - 1 Tag 10 Uhr") ... nicht ganz genau, aber es ist ein Schaffen-und-nie-Berühren- Code – suntrop