Javascript 显示当前日期两次
我使用javascript和html创建日期下拉列表。在加载我的php文件时,它会显示今天的日期。但问题是,它显示了今天两次。 例如:如果今天的日期是2015年12月2日,则下拉列表中的日期选项为“1,2,3…11,12,12,14…等等。此处未显示第13天 谁能帮我更正一下日期吗。 以下是我的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'];
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();