将Date递增到一个月中预定义的下一个日期
Incrementing a Date to the next occurence of a pre-defined day of the month
我有一个应用程序,我要求用户在一个月的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与日期。
这确实有效,但在某些情况下,我得到一个最大调用堆栈大小超过错误。还有其他方法可以找到下一次出现的日期吗?
不需要乱搞时间戳。这是你想要的。它将日期设置为"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);
}
使用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。
我采纳了Steven的贡献,现在已经得到了下面的方法。
我在这个方法中去掉了函数的需要,我把它过于复杂化了,而实际上这是一个相当简单的技术。
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;
相关文章:
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- SuiteScript2.0-包括一个自定义文件
- Wordpress在播放器旁边播放一个自定义的下载按钮,而不是下载
- TinyMCE保留预定义的html结构
- SuiteScript:如何有一个自定义的数据字段来从数据库加载信息
- 变量转换为另一个“未定义”的变量
- getDataAsJSON()在PHP中是一个未定义的函数,但许多解释如何使用JSONP的网站都说要使用它
- 如何使用其他自定义指令中的元素标记作为另一个自定义指令的模板
- 调用另一个自定义指令的角度自定义指令
- 所以这是说我的法定对象中有一个未定义的变量
- 为什么在这个数组的末尾会有一个未定义的
- 我想做一个自定义的dojo JsonRest商店,有一部分我没有'我不明白
- 如何调用另一个js文件中的函数或触发一个自定义事件,该事件将参数作为Jquery中的数据对象传递
- 我想知道如何创建一个自定义对话框,当点击按钮时会弹出
- 在brunc.io中创建一个自定义JS目录
- 如何使用Angular 1.5组件将属性求值为字符串,这是一个自定义函数
- 为谷歌工作表创建一个自定义函数
- 为什么我得到一个未定义的回报
- Router.use()需要中间件函数,但得到了一个未定义的函数
- Vaadin:调用一个自定义的JavaScript函数