2011-11-27 123 views
2

我真的在努力,以實現以下目標:動態的日期選擇

<option value="2011-11"><? echo $month[11]?> '11</option> 
<option value="2011-12"><? echo $month[12]?> '11</option> 
<option value="2012-1"><? echo $month[1]?> '12</option> 
<option value="2012-2"><? echo $month[2]?> '12</option> 

凡下面根據今天的日期是動態的:

<option value="YYYY-m"><? echo $month[12]?> 'yy</option> 

,並重覆上述過程在今天之前的12個月內。我使用PHP的基礎知識取得了一些進展,我承認我需要那些比我更有知識的人的幫助!

它看起來很簡單,我經常看看stackoverflow來解決問題,儘管在這個場合我花費了太多的時間和太少的進度。

任何人都可以給我一個這個看似簡單的挑戰!

謝謝!!!

回答

1

這個片段是概念驗證,實現你想要的。

for($i=0;$i<=12;$i++) 
{ 
    $time = strtotime("today + ". $i." months"); 

    print '<option value="'. date("Y-m", $time) .'">'.date("Y-m",$time).'</option>'; 
} 

如果你想在特定的語言來打印月份的名稱,你應該setlocale看看,只是使用F參數date

+0

「的第一天,」 你可以用'mktime'了'strtotime'的效率和可預見性其結果。 – nickb

+0

這種方法考慮了年份的變化,這對mktime來說更具挑戰性。 –

+0

謝謝Jan!我可以相信這是多麼容易,學習PHP是具有挑戰性的,儘管事情起作用時它非常酷!最後,setlocale命令不起作用,所以我只用一個帶有西班牙文月份名稱的數組,然後像這樣打印它們!再次感謝你,你真的幫我了! – Alex

0

在這裏你去:

$time = time(); 

foreach (range(0, 12) as $i) 
{ 
    echo '<option value="' . date('Y-m', $time) . '">' . $month[date('m', $time)] . date('y', $time) . '</option>' . "\n"; 

    if ($i >= 1) 
    { 
     $time = strtotime('next month', $time); 
    } 
} 
2

評論誰發現問題的人。

接受的答案是錯誤的。在這裏看到:

http://www.php.net/manual/en/function.strtotime.php#107331

用這個代替:

<?php 
for($i=0;$i<=12;$i++) 
{ 
    $time = strtotime("first day of +". $i." months"); 
    print '<option value="'. date("Y-m", $time) .'">'.date("Y-m",$time).'</option>'; 
} 
?> 

的修復是

+0

不錯的作品指出「第一天」。我每天都在使用PHP 10多年,而strtotime()因爲它的強大性和靈活性而頻繁使用。這是我第一次看到使用過。 –