2016-08-30 2 views
-1

Ich brauche eine Funktion, die das Jahr zurückgibt, wenn ein bestimmtes Datum (Tag + Monat) das erste Mal ab sofort auftritt.PHP: Jahr, wenn ein Datum das nächste Mal auftritt

function year($day, $month) { 
    // ... 
    return $year; 
} 

$day und $year sind zweistellige Zahlen

Z.B. Das angegebene Datum ist '12/25 'und sollte' 2016 '(oder' 16 ') zurückgeben, aber wenn das Datum '02/25' ist, sollte '2017' (oder '17') zurückgegeben werden. [Heute ist der 30. August 2016]

Schaltjahre können ignoriert werden und die Eingabe muss nicht validiert werden.

EDIT: Mein Versuch

year($day, $month) { 

    $today_day = date('d'); 
    $today_month = date('m'); 

    $year = date('y'); 

    if($month > $today_month) { 
    return $year; 
    } else if ($month < $today_month) { 
    return $year + 1; 
    } else { 
    if($day >= $today_day) { 
     return $year; 
    } else { 
     return $year + 1; 
    } 
    } 

} 
+0

Ich verstehe es nicht. – Linesofcode

+0

@TheOneandOnlyChemistryBlob Ein Vergleich mit heute, aber ich denke, meine Lösung ist unnötig groß – Scriptim

+1

Wenn Sie es veröffentlichen andere werden sich fühlen, wie sie Ihre Arbeit für Sie tun und geben Ihnen möglicherweise eine Antwort –

Antwort

2

Man vergleiche nur das Datum, das Sie gegen heute überprüft werden. Wenn es heute oder früher ist, erhöhen Sie das Jahr des Datums. Ansonsten nicht. Dann kehre in diesem Jahr zurück.

DateTime() Funktionalität macht dies einfach zu tun.

function year($day, $month) { 
    $date = new DateTime("{$month}/{$day}"); // defaults to current year 
    $today = new DateTime(); 
    if ($date <= $today) { 
     $today->modify('+1 year'); 
    } 

    return $today->format('Y'); 
} 

echo year(6, 6); // 2017 
echo year(12, 12); // 2016 

Demo

1

Vielen Dank für Ihre Mühe! Es war ziemlich gut, aber kann sicherlich eine Feinabstimmung verwenden. Wir könnten das Nein reduzieren. von unnötigen if-Aussagen.

Die Funktion akzeptiert zwei Parameter: Monat und Datum. Bitte vergewissern Sie sich, dass wir der Bestellung folgen, während Sie die Funktion aufrufen.

In der Funktion ist $ date das Eingangsdatum, das mit dem aktuellen Jahr verkettet ist.

ZB: Jahr (12,25) bezieht sich auf das Jahr, in dem Monat Dezember (12) und Tag ist 25.

Jahr (12,25) würde $ date als 2015.12.25 machen .

function year($month, $day) 
{ 
    $date= date('Y').'-'.$month.'-'.$day; 
    if (strtotime($date) > time()) { 
     return date('y'); 
    } 
    return (date('y')+1); 
} 

echo year(12,25); // 16 

echo year(2,25); // 17 

Nun, alles was wir tun müssen, um den Zeitstempel von $ date mit dem aktuellen timestamp- Zeit überprüfen().

strtotime ($ date)> time() Eingabedatum Zeitstempel ist mehr als der aktuelle Zeitstempel. Was bedeutet, dass dieses Datum noch in diesem Jahr kommen wird. Also, wir geben das aktuelle Jahr Datum ('Y') zurück.

Wenn das obige if nicht ausgeführt wird, ist es offensichtlich, dass dieses Datum vergangen ist. Daher geben wir das nächste Jahr Datum ('Y') + 1 zurück.

Verwandte Themen