2016-06-29 37 views
0

在回答解答下面

創建爲我的用戶調度工具,我有一個問題想增加從下拉選擇中獲得我的變量:

$date_select = $_POST['date_select']; 

我敢肯定這是一本教科書修復,但簡單地說...我需要在$ 52周內增加$ date_select +1周。

我有一個下拉菜單,從當前日期開始,循環到365天結束,遞增1.這裏沒有問題。

<select name="date_select" form="create_schedule"> 
<?php 
for($i = 0; $i <= 365; $i++){ 
$d=strtotime($i . " Day"); 
$day = date("n-j-y l", $d) . "<br>"; 
echo "<option>" . $day . "</option>"; 
} 
?> 
</select> 

該選擇是由下式表示:

$date_select = $_POST['date_select']; 

下一步是,在提交前,用戶可以選擇一個單選按鈕 - 無論是M,T,W,釷,F,SAT,或Sun到表明他們是否希望將其請求應用到該選定日期,每週的其餘時間。 (這是我想要做的...這是:通過「+1周」,直到for循環結束後增量$ date_select):

$repeat = $_POST['repeat']; 

這種選擇被表示爲是我得到的最接近...下面的代碼爲每個「星期一」增量,就像我想要的例如...如果$重複=='M',但數字日期是錯誤的...

if(isset($_POST['repeat'])){ 
     for($i = 0; $i <= 52; $i++){ 
      $date = strtotime($i . " week", strtotime($date_select)); 
      echo date("n-j-y l", $date) . "<br/>"; 
      } 

例如:如果選擇的日期是星期一7-4-16,則輸出爲:

07年11月26日星期一

07年12月3日星期一

零七年十二月十日週一

07年12月17日星期一

07年12月24日星期一

07年12月31日星期一

08年1月7日星期一

等等......

在此先感謝您。

+0

東西你''

回答

1

解決的問題是什麼日期格式...「mdY」在增加天數週或月數時與輸出方式不同,爲「m/d/Y」。在某些地方,「美國」日期格式值和「歐洲」日期格式值混在一起。我改變了兩個for循環中的日期格式,並讓它工作。「注意:注意m/d/y或dmy格式的日期;如果分隔符是斜線(/),則假設美國的m/d/y;如果分隔符是短劃線 - )或點(。),則假設爲歐洲dmy格式。爲避免潛在錯誤,應儘可能使用YYYY-MM-DD日期或date_create_from_format()。

http://www.w3schools.com/php/func_date_strtotime.asp

這裏是任何人的情況下,工作的解決方案是試圖做類似的

<select name="date_select" form="create_schedule"> 
<?php 
for($i = 0; $i <= 365; $i++){ 
$d=strtotime($i . " Day"); 
$day = date("m/d/Y l", $d) . "<br>"; 
echo "<option>" . $day . "</option>"; 
} 
?> 
</select> 

if(isset($_POST['repeat'])){ 
    $repeat = $_POST['repeat']; 
    echo "<br/>"; 
     for($i = 0; $i <= 13; $i++){   
      $d=strtotime($i . " week", strtotime($date_select)); 
      echo date("m/d/Y l", $d) . "<br/>"; 
      } 
} 
0

所以在PHP,你必須類,可以真正的幫助這樣做

\DateTime\DateInterval

所以,做你想做的,我會建議

$firstDate = \DateTime::createFromFormat('Y-m-d', $date_select)); 
$baseDate = clone $firstDate; 
$intervalToAdd = new \DateInterval('P1w') 
if(isset($_POST['repeat'])){ 
     for($i = 0; $i <= 52; $i++){ 
      $date [$i] = $baseDate->add($intervalToAdd); 
      echo '<option>'.$date[$i]->format('Y-m-d').'</option>'; 
      } 
+0

謝謝,但沒有做到這一點。 – Shane

+0

你可以給我輸出嗎? –

+0

我想通了 - 我把解決方案放在我原來的帖子裏。 – Shane