2011-11-27 77 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()因为它的强大性和灵活性而频繁使用。这是我第一次看到使用过。 –