2013-03-30 25 views
2

我正在尋找一種方法來讓訪問我的網站的用戶通過HTML表單輸入日期,然後使用php從他們輸入的日期中減去或添加時間。例如,在他們將進入他們的生日的形式,我希望PHP生日後5天回聲。我研究了很多方法在php中添加日期,所以我不認爲這會是一個問題。我只是無法弄清楚如何讓PHP將表單輸入識別爲日期。將HTML表單輸入轉換爲日期php可以理解

這裏是我的HTML代碼來選擇日期:

<select name="DMonth" input type="number"> 
    <option>- Select Month -</option> 
    <option value=1>January</option> 
    <option value=2>February</option> 
    ... 
    <option value=12>December</option> 
</select> 
<select name="DDay" input type="number"> 
<option>- Select Day -</option> 
    <option value=1>1</option> 
    <option value=2>2</option> 
    ... 
    <option value=31>31</option> 
</select> 
<select name="DYear" input type="number"> 
    <option>- Select Year -</option> 
    <option value=2013>2013</option> 
    <option value=2014>2014</option> 
    ... 
    <option value=2022>2022</option> 
</select><br> 
<select name="DHour" input type="number"> 
<option>- Select Hour -</option> 
<option value=00>12 a.m.</option> 
<option value=01>1 a.m.</option> 
<option value=02>2 a.m.</option> 
<option value=03>3 a.m.</option> 
<option value=04>4 a.m.</option> 
<option value=05>5 a.m.</option> 
<option value=06>6 a.m.</option> 
<option value=07>7 a.m.</option> 
<option value=08>8 a.m.</option> 
<option value=09>9 a.m.</option> 
<option value=10>10 a.m.</option> 
<option value=11>11 a.m.</option> 
<option value=12>12 p.m.</option> 
<option value=13>1 p.m.</option> 
<option value=14>2 p.m.</option> 
<option value=15>3 p.m.</option> 
<option value=16>4 p.m.</option> 
<option value=17>5 p.m.</option> 
<option value=18>6 p.m.</option> 
<option value=19>7 p.m.</option> 
<option value=20>8 p.m.</option> 
<option value=21>9 p.m.</option> 
<option value=22>10 p.m.</option> 
<option value=23>11 p.m.</option> 
</select> 
<select name="DMin" input type="number"> 
<option>- Select Minute -</option> 
<option value=0>00</option> 
<option value=15>15</option> 
<option value=30>30</option> 
<option value=45>45</option> 
</select> 

,這就是我想我會在PHP

$DMonth=$_POST["DMonth"]; 
$DDay=$_POST["DDAY"]; 
$DYear=$_POST["DYear"]; 
$DHour=$_POST["DHour"]; 
$DMin=$_POST["DMin"]; 
$Bday = date_create($DYear.'-'.$DMonth.'-'.$DDay.' '.$DHour.':'.$DMin.':00'); 
echo date_format($Bday, 'Y-m-d H:i:s'); 

使用,但是當我運行的形式,唯一它回聲是當前的日期和時間。

回答

2

我沒有看到你的小時和分鐘

代碼這是一個有點令人費解,因爲它是一個插件到你的代碼,但會做的伎倆。

$DMonth=$_POST["DMonth"]; 
$DDay=$_POST["DDAY"]; 
$DYear=$_POST["DYear"]; 
$DHour=$_POST["DHour"]; 
$DMin=$_POST["DMin"]; 
$Bday = date_create($DYear.'-'.$DMonth.'-'.$DDay.' '.$DHour.':'.$DMin.':00'); 
echo date_format($Bday, 'Y-m-d H:i:s'); 

$datetime = new DateTime(date_format($Bday, 'Y-m-d H:i:s')); 
$datetime->modify('+5 days'); 
echo $datetime->format('Y-m-d H:i:s'); 

簡化版本

$datetime = DateTime::createFromFormat('Y-n-j H:i', $DYear.'-'.$DMonth.'-'.$DDay.' '.$DHour.':'.$DMin); 
echo $datetime->format('Y-m-d H:i:s'); // Birthday 
$datetime->modify('+5 days'); 
echo $datetime->format('Y-m-d H:i:s'); // 5 days later 
+0

好的,當我運行它時,它說echo $ datetime('Y-m-d H:i:s');是致命錯誤:函數名稱必須是字符串。 –

+0

對不起。我完全忽略了代碼的重要部分。現在就試試。 –

+0

我很感激幫助。使用新代碼,它現在僅顯示爲距當前日期5天而非輸入日期。 –

0

......怎麼

$datetime= mktime($DHour, $DMin, 0, $DMonth, $DDay, $DYear); 

有關更多信息,請參見the mktime help page - 無需修建串也不用擔心格式,只要提供相應的參數名稱Hour, Minute, Second, Month, Day, Year

也有一對夫婦的問題,在你的HTML。對於選擇語法如下:

<select name="DYear"> 
    <option>- Select Year -</option> 
    <option value="2013">2013</option> 

注意,<select>沒有input和值都用引號括起來。也沒有必要指定type="number"。要正確地將數值作爲整數而不是字符串,請在PHP中執行此操作:

$DYear = (int) $_POST["DYear"]; 
+0

我在上面的方法之前嘗試了這一點,並且仍然每當我嘗試回顯它時返回當前時間(在Unix中)。 –

+0

@AnnHolley然後我懷疑你在其他地方有問題,我向你保證'mktime()'有效。看到http://codepad.org/zKjz2Eey我已經添加了一些修補程序到您的HTML可能會有所幫助 – Basic