我有一个应用程序,我要求用户在一个月内选择2天中的一天。第4或第18。当用户选择了这个值时,我会取这个值,就像今天的日期一样。
在进行任何处理之前,我需要为管理工作添加25天。
day = parseInt(day);
var curDateTime = new Date().getTime(),
timeToAdd = (1000*60*60*24*25),
datePlusDays = new Date(),
finalDate = new Date();
datePlusDays.setTime(timeToAdd + curDateTime);
function incrementToSelected(toIncrement, incrementTo){
var currentDay = parseInt(toIncrement.getDate());
if (currentDay != incrementTo){
var addedDay = new Date();
addedDay.setTime(toIncrement.getTime() + (1000*60*60*24));
incrementToSelected(addedDay, incrementTo );
} else if (currentDay === incrementTo){
finalDate = toIncrement;
}
}
incrementToSelected(datePlusDays, day);
datePlusDays现在是今天的日期+25天。现在,我需要找到用户选择的日期的下一次出现。
目前,我正在使用上面的方法在日期中添加一天(1000 * 60 * 60 * 24)并检查是否是下一次出现,如果没有添加另一个,如果设置为finalDate与日期。
这确实有效,但在某些情况下我得到的最大调用堆栈大小超出错误。有没有其他方法可以找到下一次出现的日期?
答案 0 :(得分:1)
无需弄乱时间戳。这将做你想要的。它将日期设置为“incrementTo”,并有条件地增加月份(如果incrementTo是< =当前日期)和必要时的年份(如果月份是12月,则翻到1月并递增年份)。
function incrementToSelected(toIncrement, incrementTo){
if (toIncrement.getDate() >= incrementTo) {
toIncrement.setDate(1); // Avoid month-rollover edge case
var m = toIncrement.getMonth();
if (m == 11) {
toIncrement.setFullYear(toIncrement.getFullYear()+1);
toIncrement.setMonth(0);
} else {
toIncrement.setMonth(m + 1);
}
}
toIncrement.setDate(incrementTo);
}
答案 1 :(得分:0)
我已经采取了史蒂文的贡献,并且现在已经有了以下方法。
我已经删除了对这个方法中的函数的需要,当它真的是一个相当简单的技术时,我已经过度复杂了。
day = parseInt(day);
var curDateTime = new Date().getTime(),
timeToAdd = (1000*60*60*24*25),
datePlusDays = new Date(timeToAdd + curDateTime);
if (day >= datePlusDays.getDate()){
datePlusDays.setDate(day);
} else if (day < datePlusDays.getDate()){
var m = datePlusDays.getMonth();
if (m == 11){
datePlusDays.setFullYear(datePlusDays.getFullYear() + 1);
datePlusDays.setMonth(0);
} else {
datePlusDays.setMonth(datePlusDays.getMonth() + 1);
}
datePlusDays.setDate(day);
}
return datePlusDays;
答案 2 :(得分:0)
使用Date函数自动滚动数月和数年这一事实更简单....
function Dday (admin, day) {
var nextDate = new Date();
nextDate.setDate (nextDate.getDate () + (admin || 25)); // add on the 25 days
// Caution if day is not within range 1-31 this loop is infinite!
while (nextDate.getDate () != (day || 4)) // keep adding 1 day till date == day.
nextDate.setDate (nextDate.getDate () + 1);
return nextDate;
}
我已将该功能设为两个可选参数,admin
是默认为25的管理员天数,day
是该月的日期,默认为4。