2012-03-31 18 views
1

Hallo mein PHP-Skript hat zwei Textfelder (eins für Monat und eins für Jahr). Wenn der Benutzer die Senden-Schaltfläche drückt, sollte er die Eingaben überprüfen, um zu sehen, ob die Daten abgelaufen sind. Hier ist der Code, den ich gemacht habe, aber es scheint nichts zu tun.Wie überprüft man, ob ein Datum abgelaufen ist (PHP)

$input_date = "$_POST['m']/$_POST['y']"; 

$todays_date = date("MM/YY"); 

if ($input_date < $todays_date) 
{ 
    print '<p class = "error">Date has elapsed</p>'; 
} 

Hinweis: das Datumsformat Monat/Jahr (Textbox 'm' enthält MM und tetxbox 'y' enthält YYYY)

+4

Sie können Strings wie '04/2012' nicht mit dem Operator' <'vergleichen. Oder in diesem Fall "04/2012" und "AprApr/20122012". – JJJ

+1

Haben Sie eine der 10 Millionen Fragen zu SO in Betracht gezogen, die sich speziell mit dem Vergleich von Daten in PHP befassen? Das Suchfeld oben rechts ist dein Freund. – rdlowrey

Antwort

5

Sie können mktime() oder strtotime()

$input_time = mktime(0,0,0,$_POST['m']+1,0,$_POST['y']); 

if ($input_time < time()){ 
    print '<p class = "error">Date has elapsed</p>'; 

} 
+0

@jeroen danke, aber warum '31'? – safarov

+0

Entsprechend dem Handbuch "Werte größer als 12 Referenz den entsprechenden Monat in den folgenden Jahr (en).". Wenn Sie also $ _POST ['m'] + 1 'verwenden, erzeugen Sie einen Zeitstempel in der ersten Sekunde des nächsten Monats und das ist genau das, was Sie wollen. – jeroen

+0

@jeroen. Jetzt behoben – safarov

2

Sie wahrscheinlich die strtotime Funktion wie diese verwenden:

$input_date = "$_POST['m']/$_POST['y']"; 
$todays_date = date("m/Y"); 

if (strtotime($input_date) < strtotime($todays_date)){ 
print '<p class = "error">Date has elapsed</p>'; 

} 

lesen Sie hier, welche Art von Formaten strtotime verarbeiten kann: http://php.net/manual/en/function.strtotime.php

+2

Beachten Sie, dass 'MM/YY' etwas wie' AprApr/20122012' ergibt - es sollte nur 'M/Y' sein. – Bojangles

+0

Richtig, eigentlich sollte m/Y für korrektes Format sein. – jonaz

+0

das funktioniert nicht – Matt9Atkins

2

Ich glaube nicht, dass Sie die $ _POST Variablen in Anführungszeichen setzen. Zum Beispiel wird der folgende Code zum Absturz bringen:

<?php 
$foo = array("foo" => "bar"); 
$input = "$foo['foo']"; 
print $input; 
?> 

Stattdessen versuchen

$input_date = $_POST['m'] . "/" . $_POST['y']; 

Auch Sie können Umkehren Monat und Jahr zu berücksichtigen. In der aktuellen Regelung kommt 01/13 vor 12/12.

Verwandte Themen