2016-07-28 20 views
1

Stackoverflow社區。最近我只有獨特的經驗。經過Google,試用了幾個小時,但仍未找到解決方案。輸入和期望的輸出其實很簡單,但棘手,我只是不知道如何正確編碼。HTML5&PHP:從輸入值中獲取並轉換MONTH輸入類型值到STRING和減去一個月

那麼,我會定義的要求。

說明和要求:

  1. 我有一個輸入字段。這個輸入字段類型是MONTH(不是DATE)。所以基本上這個輸入字段應該只產生年份和月份,與產生完整日期的DATE輸入類型不同。

  2. 我想在之前轉換爲STRING之前在此MONTH輸入字段中回顯值(例如:「2016-7」採用STRING格式),並且還生成諸如「2016年7月」之類的內容。

此MONTH格式與DATE格式類似,但通常與DATE格式一起使用的腳本不能與MONTH格式一起使用。這讓我想知道,我好奇爲什麼。

實驗:

對於基本的輸入類型一個月,我使用這個腳本。

<input type="month" name="monthTransaction" value="<?php echo date("Y-m") ?>"/> 

然後我試着這樣迴應它。

$month = mysql_real_escape_string($_POST['monthTransaction']); 
$newmonth = date('Y-m', strtotime(str_replace('-', '/', $tr))); 
echo $month; // Probably STRING format (i need further explanation) 
echo $newmonth; // Probably DATE format (i need further explanation) 

這畢竟不行。但我試着與DATE類型的輸入字段,它的工作。 DATE類型格式的迴音很好。

從這段代碼我知道實際上strtotime不會將DATE轉換爲字符串。我不太瞭解它,但它可以很好地運行(可以回顯)DATE格式,但不適用於MONTH格式。

如果您可以告訴我如何將MONTH輸入類型轉換爲STRING,那將會非常棒,因爲我可以從中學習。

所需的輸出:

  1. 將在基本格式打印,如 「2016-07」
  2. 將先進的格式打印,如 「2016年7月」

=== ================================================== ====

第二個問題(減去一個月的輸入值):

那實際上是另一個與此相關的問題。

第二個問題說明及要求:

  1. 其實我是想獲得MONTH輸入字段減一(-1)一個月的輸入值的輸入值。

第二個問題所需的輸出:

  1. 所以,如果你輸入 「2016-07」 爲例,它會給 「2016-06」 等。

DATE格式是普通的,但MONTH格式似乎在挑戰我。任何人都知道如何解決這個問題?正如我所說的簡單但棘手。順便說一句,謝謝你提前。

回答

0

您可以使用DateTime class

$month = mysql_real_escape_string($_POST['monthTransaction']); 
$temp = new DateTime($month.'-01'); 
$newmonth = $temp->format('Y-m'); 
$newMonthName = $temp->format('F Y'); 
$newMonthMinusOne = $temp->sub(new DateInterval('P1D'))->format('Y-m'); 
$newMonthMinusOneName = $temp->sub(new DateInterval('P1D'))->format('F Y'); 

隨着輸入 '2016-07' 的值(所有字符串)將是:

  • 2016-07
  • 2016年7月
  • 2016- 06
  • 2016年6月
+0

嘗試過,並且工作得很好。非常感謝你,它是快速響應,我很高興能使它工作。我將使用此代碼作爲我未來編碼的參考。我不熟悉閱讀PHP和MySQL的直接參考,因爲我的大學不是最新的學習PHP和MySQL。再一次感謝你。 –

+0

btw我可以問更多的問題嗎?可以說我想要它來到一天而不是一個月,下面的代碼是否正確? $ day = mysql_real_escape_string($ _ POST ['dayTransaction']); $ temp = new DateTime($ day .'-01'); $ newday = $ temp-> format('Y-m-d'); $ newDayName = $ temp-> format('D F Y'); $ newDayMinusOne = $ temp-> sub(new DateInterval('P1D')) - > format('Y-m-d'); $ newDayMinusOneName = $ temp-> sub(new DateInterval('P1D')) - > format('D F Y'); –

+0

@KeshiaAngelina如果你的輸入是一個包含日期的日期(即'2016-07-28'),那麼你不必在創建DateTime時添加'-01'(因爲'-01'模擬當天)'$ temp = new DateTime($ day);'。否則這將工作。 – MadMarc