2016-12-14 2 views
1

Ich bin neu in PHP und brauche etwas Hilfe, ich versuche, die Benutzereingabe zu nehmen und formatieren, so dass die Ausgabe den letzten Tag des Monats zeigt. Hier ist, was ich bisher:PHP unter Benutzereingabe und Formatierung Ausgabe (Daten)

<?php 
    //form for user-input 
    echo "<form name='form' method='post' action='array.php'>"; 
    echo "<p>Enter Date in ' Month/Day/Year ' format<p>"; 
    echo "<input type='text' id='date-input' name='date-input' placeholder='Enter date' />"; 
    echo "</form>"; 

    //grab user-input 
    $input=$_POST["date-input"]; 

    //output in correct format 
    echo $input->format("m/t/Y"); 


?> 

Wenn ich nur Echo Eingangsgröße ohne die Formatierungsfunktion und Datumsformat dann zeigt es, was die Benutzereingaben, aber wie es jetzt festgelegt; nichts wird angezeigt und ich bekomme diese Zeile:

Zeile 190 ist meine Echo-Eingabezeile.

+0

'$ input' ist eine Zeichenfolge, kein Objekt. Versuchen Sie es mit 'echo $ input; 'und wenn Sie Datum möchten, müssen Sie die Zeichenfolge möglicherweise in Datum konvertieren. Werfen Sie einen Blick auf [strtotime] (http://php.net/manual/en/function.strtotime.php) – bansi

+0

Wenn Sie sagen "Ausgabe zeigt den letzten Tag des Monats" bedeutet das, dass Sie wie viele ausgeben möchten Tage sind im Monat vorgesehen? – Alesana

+0

Ja im Grunde, weshalb ich versuche, mit "t" für die gesamten Tage zu formatieren, möchte ich nur die Anzahl der Tage im angegebenen Monat für das, was der Benutzer als Datum eingibt, ausgeben. Sagen Sie also, der Benutzer gibt den 02.05.2017 an. Ich möchte, dass die Ausgabe 28.02.2017 anzeigt. Ich möchte auch, dass sie für Schaltjahre zählt. –

Antwort

2

Versuchen Sie, diese ersetzen. Möglicherweise müssen Sie zuerst ein Datum aus Ihrer Eingabezeichenfolge erstellen. Gebrauchte createFromFormat

$date = DateTime::createFromFormat('m/d/Y', $input); 
echo $date->format('m/t/Y'); 

Hinweis: Denken Sie daran, Zeitzone-Parameter auch mit allen Datetime-Funktionen zu nutzen.

+0

verwenden Das funktionierte perfekt! Ich werde jetzt nachschlagen, wie man DateTimeZone implementiert oder Parameter für die Zeitzone verwendet. Vielen Dank! –

0

wie etwas

//output in correct format 
    echo $input->format("m/t/Y"); 

mit

//output in correct format 
    echo date("m/d/Y",strtotime($input)); 
+0

Ich sah nur die Bearbeitung, aber ich möchte versuchen, zu vermeiden und strtotime wegen es funktioniert nicht nach Jahr 2038 –

+0

was bedeutet, dass Sie schlechte Eingabe passieren. schaue in dieses Beispiel und teste es: echo $ input = date ('d M Y'); echo "
" .date ("m/d/Y", strtotime ($ input)); ' – Naga

+0

Stellen Sie sicher, dass der Monat eine Zeichenkette sein sollte (z. B. Jan oder Januar), nicht numerisch. – Naga

0

Vielleicht Ihre Vorstellungen,

<?php 

$date = "2040-11-23"; 

$Year = DateTime::createFromFormat("Y-m-d", $date)->format("Y"); 

$YearWithDay = DateTime::createFromFormat("Y-m-d", $date)->format(" Y-m, t \d\a\y."); 

function is_leap_year($year) 
{ 
    return ((($year % 4) == 0) && ((($year % 100) != 0) || (($year % 400) == 0))); 
} 

echo $YearWithDay."<br>"; 
echo (is_leap_year($Year))?"This Year is Leap year": ""; 

?> 

OUTPUT

2040-11, 30 day. 
This Year is Leap year