2016-12-14 81 views
1

我是新來的PHP和需要一些幫助,我想採取用戶輸入並格式化,以便輸出顯示該月的最後一天。這是我到目前爲止有:PHP採取用戶輸入和格式化輸出(日期)

<?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"); 


?> 

當我有沒有格式化功能和日期格式只是回聲輸入變量,然後它會顯示哪些用戶輸入,但它是如何現在設置權;沒有顯示,我得到這一行:

Fatal error: Call to a member function format() on string in C:\xampp\htdocs\php-sessions\session-3\array.php on line 190 

190行是我的回聲輸入行。

+0

'$ input'是一個字符串不是一個對象。嘗試使用'echo $ input;',如果你想要日期,你可能需要將字符串轉換爲日期。看看[strtotime](http://php.net/manual/en/function.strtotime.php) – bansi

+0

當你說「輸出顯示月份的最後一天」是否意味着你希望它輸出多少天是否在本月提供? – Alesana

+0

是的基本上,這就是爲什麼即時嘗試使用「t」格式化總天數,我只想輸出給定月份中用戶輸入日期的天數。所以說用戶類型2/05/2017。我希望輸出顯示2/28/2017我也希望它可以算作閏年。 –

回答

2

更換

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

試試這個。您可能需要先從輸入字符串中創建日期。使用createFromFormat

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

注意:請記住在所有日期時間函數中也使用時區參數。

+0

這完美的工作!我現在將查找如何實現DateTimeZone和或使用時區參數。謝謝! –

0

像與

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

剛剛看到了編輯,但是我想嘗試避免使用strtotime,因爲它在2038年的 –

+0

之後不工作,這意味着您正在傳遞錯誤的輸入。看看這個示例並測試它'echo $ input = date('d M Y'); echo「
」.date(「m/d/Y」,strtotime($ input));' – Naga

+0

確保月應該是字符串(例如,1月或1月)不是數字。 – Naga

0

也許滿足您的要求,

<?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": ""; 

?> 

輸出

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