2016-12-14 138 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