Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 显示当前日期两次_Javascript_Html - Fatal编程技术网

Javascript 显示当前日期两次

Javascript 显示当前日期两次,javascript,html,Javascript,Html,我使用javascript和html创建日期下拉列表。在加载我的php文件时,它会显示今天的日期。但问题是,它显示了今天两次。 例如:如果今天的日期是2015年12月2日,则下拉列表中的日期选项为“1,2,3…11,12,12,14…等等。此处未显示第13天 谁能帮我更正一下日期吗。 以下是我的javascript: var monthtext=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sept','Oct','Nov','Dec'];

我使用javascript和html创建日期下拉列表。在加载我的php文件时,它会显示今天的日期。但问题是,它显示了今天两次。 例如:如果今天的日期是2015年12月2日,则下拉列表中的日期选项为“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
}
var monthtext=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月];
函数填充下拉列表(日字段、月字段、年字段){
var today=新日期()
var dayfield=document.getElementById(dayfield)
var monthfield=document.getElementById(monthfield)
var yearfield=document.getElementById(yearfield)
var thisday=1;

对于(var i=0;i,您不是为当前日期选择一个现有选项,而是添加一个新选项。例如,在您的日期字段中,您添加数字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;
}
var today=新日期();

对于(var i=0;i我认为您需要对代码进行以下更改。
today.getDate()
是12,其中
dayfield.options[12]
是第13个日期。因此它将第13个日期替换为第12个,并重复第12个,然后删除13个

替换

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


你的问题在于线路

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[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]是执行此线路之前的第三个插槽

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

// 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;
}

for(var i=0;i您可以简化它,只需使用迭代器变量

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

我没有看到任何PHP代码!这与PHP有关吗?->向我们展示您的PHP代码,使用下划线函数u.uniq(),例如:u.uniq([1,2,1,3,1,4]);//1,2,3,4…或使用arr.filter。为什么要使用for循环,然后增加另一个变量?这是for的全部要点。为什么不为for执行此
(var thisday=1;thisday@JLevett,很高兴看到您在一个月内允许31天。OP的代码和其他几个线程中的代码只允许1-30天。谢谢您,这太完美了:)欢迎您@LillyShk
// Note the -1
dayfield.options[today.getDate() -1] = new Option(today.getDate(), today.getDate(), true, true); //select today's day
for (var i=0; i<31; i++) {
  var selected = thisday == today.getDate();
  dayfield.options[i]=new Option(thisday, thisday, selected, selected);
  thisday+=1;
}
for (var i=1; i<32; i++) {
    dayfield.options[i]=new Option(i, i);
}
var daysInMonth = new Date(year, month, 0).getDate();