显示当前两天

时间:2015-02-02 04:52:54

标签: javascript html

我使用javascript和html创建了我的日期下拉列表。上载我的php文件它显示今天的日期。但问题是,它显示了今天的两天。 例如:如果今天的日期是12-2-2015它在下拉列表中有DAY的选项为" 1,2,3 ...... 11,12,12,14 ...等等。这里没有显示第13天。

任何人都可以帮我纠正日期。 这是我的javascript:

 var monthtext=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sept','Oct','Nov','Dec'];

function populatedropdown(dayfield, monthfield, yearfield){
  var today=new Date()
  var dayfield=document.getElementById(dayfield)
  var monthfield=document.getElementById(monthfield)
  var yearfield=document.getElementById(yearfield)
  var thisday=1;
  for (var i=0; i<31; i++) {
    dayfield.options[i]=new Option(thisday, thisday)
    thisday+=1;
  }

  dayfield.options[today.getDate()]=new Option(today.getDate(), today.getDate(), true, true) //select today's day

  for (var m=0; m<12; m++) monthfield.options[m]=new Option(monthtext[m], monthtext[m])

  monthfield.options[today.getMonth()]=new Option(monthtext[today.getMonth()], monthtext[today.getMonth()], true, true) //select today's month

  var thisyear=1999
  for (var y=0; y<45; y++){
    yearfield.options[y]=new Option(thisyear, thisyear)
    thisyear+=1
  }
  yearfield.options[0]=new Option(today.getFullYear(), today.getFullYear(), true, true) //select today's year
}

这是我的HTML代码:

<tr><br><td>Date of Diagnosis</td><td>
  <select id="daydropdown" name="daydropdown"></select> 
  <select id="monthdropdown" name="monthdropdown"></select>
  <select id="yeardropdown" name="yeardropdown"></select>
  <script type="text/javascript">
    //populatedropdown(id_of_day_select, id_of_month_select, id_of_year_select)
    window.onload=function() {
      populatedropdown("daydropdown", "monthdropdown", "yeardropdown")
    }
  </script></td>
</tr> 

4 个答案:

答案 0 :(得分:1)

我认为您需要在代码中进行以下更改。 today.getDate()为12,其中dayfield.options[12]为第13个日期。所以它将第12次替换为第12次,并且重复第12次并删除13次。

替换

`dayfield.options[today.getDate()]=new Option(today.getDate(), today.getDate(), true, true) //select today's day`

dayfield.options[today.getDate()-1]=new Option(today.getDate(), today.getDate(), true, true) //select today's day

答案 1 :(得分:0)

您要添加新选项,而不是为当前日期选择现有选项。因此,例如在您的日期字段中,您将添加数字1到31,然后为当天添加新选项。

我会检查for循环中的当前日期并添加一个选定的属性

var today = new Date();
for (var i=0; i<31; i++) {
  dayfield.options[i]=new Option(thisday, thisday)

  if(today.getDate() == thisday) {
     dayfield.selectedIndex = i;
  }
  thisday+=1;
}

这是一个有效的JSFiddle

答案 2 :(得分:0)

您的问题在于

dayfield.options[today.getDate()]=new Option(today.getDate(), today.getDate(), true, true) //select today's day

这是为明天添加插入今天日期的第二个副本。如果你看一下循环插入日期:

var thisday=1;
for (var i=0; i<31; i++) {
  dayfield.options[i]=new Option(thisday, thisday)
  thisday+=1;
}

您将看到dayfield.options数组基于零,即第一个元素位于零位置,您还会看到thisday从1开始,因此这将等同于

dayfield.options[0] = new Option(1,1);
dayfield.options[1] = new Option(2,2);
dayfield.options[2] = new Option(3,3);
dayfield.options[3] = new Option(4,4);
....

今天的假设是本月的第二天:

dayfield.options[today.getDate()]=new Option(today.getDate(), today.getDate(), true, true) //select today's day
// would have the effect of
dayfield.options[2] = new Option(2,2,true,true);

如果你看一下上面你可以看到选项[2]是执行这条线之前的第3个插槽。

要解决此问题,您应该使用:

// Note the -1
dayfield.options[today.getDate() -1] = new Option(today.getDate(), today.getDate(), true, true); //select today's day

或在for循环中设置选中:

for (var i=0; i<31; i++) {
  var selected = thisday == today.getDate();
  dayfield.options[i]=new Option(thisday, thisday, selected, selected);
  thisday+=1;
}

答案 3 :(得分:0)

您可以简化此操作,只使用迭代器变量。

for (var i=1; i<32; i++) {
    dayfield.options[i]=new Option(i, i);
}

更好的是,使用它来获取一个月内的天数:

var daysInMonth = new Date(year, month, 0).getDate();