JavaScript添加不增加月份的天数
我知道这个问题已经出现过很多次了,我使用了推荐的解决方案来创建我的函数,但我用它来滚动日历,直到下一个/上一个4周 似乎发生的是,它第一次计算d+28时是正确的,但当输出的结果用于函数时,它不起作用 控制台日志中的示例: 第一次按“下一步”:JavaScript添加不增加月份的天数,javascript,getdate,Javascript,Getdate,我知道这个问题已经出现过很多次了,我使用了推荐的解决方案来创建我的函数,但我用它来滚动日历,直到下一个/上一个4周 似乎发生的是,它第一次计算d+28时是正确的,但当输出的结果用于函数时,它不起作用 控制台日志中的示例: 第一次按“下一步”: start Before = Tue Jul 28 2015 21:53:20 GMT+0100 (GMT Daylight Time) start After = Tue Aug 25 2015 21:53:22 GMT+0100 (GMT Daylig
start Before = Tue Jul 28 2015 21:53:20 GMT+0100 (GMT Daylight Time)
start After = Tue Aug 25 2015 21:53:22 GMT+0100 (GMT Daylight Time)
第二次按“下一步”:
start Before = Tue Aug 25 2015 21:53:22 GMT+0100 (GMT Daylight Time)
start After = Sat Aug 22 2015 21:53:28 GMT+0100 (GMT Daylight Time)
就这样继续下去
HTML:
你好,普朗克!
{{start}}
JS:
var testApp=angular.module('testApp',[]);
testApp.controller('testController',函数($scope){
$scope.start=新日期();
$scope.nextWeeks=函数(d){
log('Next:');
log('start Before='+d);
$scope.start=addDays(d,28);
log('start After='+$scope.start);
console.log('\n');
}
$scope.prevWeeks=函数(d){
console.log('Previous');
log('start Before='+d);
$scope.start=addDays(d,-28);
log('start After='+d);
console.log('\n');
}
});
功能添加天数(d,数量){
var dd=d.getDate();
变量mm=d.getMonth()+1;
变量yyyy=d.getFullYear();
如果(dd<10)dd='0'+dd;
如果(mm<10)mm='0'+mm;
var moreDate=新日期(yyyy,mm-1,dd);
var someDate=新日期();
someDate.setDate(moreDate.getDate()+数量);
返回某个日期;
}
在Plnkr上
有什么想法吗?我有什么地方出错了吗?您的功能可以大大简化,因为
日期类型会在日期超出范围时自动调整月份
function addDays(d, qty) {
var dd = d.getDate();
var mm = d.getMonth();
var yyyy = d.getFullYear();
return new Date(yyyy, mm, dd + qty);
}
另一种方法是:
function addDays(d, qty) {
var newDate = new Date(d.getTime()); // Copy date
newDate.setDate(d.getDate() + qty);
return newDate;
}
既然已经提供了解决方法,让我告诉你为什么你的方法不起作用。首先创建将年和月调整为预期值的moreDate
,然后创建someDate
,将其初始化为当前日期以及当前月份和当前年份。将qty
添加到日期,并将其设置为someDate
。然后计算是相对于今天,而不是相对于作为参数提供的日期。比如说,
var d = new Date(); //July 28 2015
d = addDays(d,28); //Aug 25 2015,works because we added 28 days to today
d = addDays(d,28); //Aug 22 2015!! Looks wrong, but is it?
最后一个电话显然是错的,但事实并非如此。逐步浏览您的代码:
/*more code*/
var moreDate = new Date(yyyy, mm - 1, dd); //Aug 25 2015
var someDate = new Date(); //Catch!! July 28 2015
someDate.setDate(moreDate.getDate() + qty); //Catch!!
//the call above added 28+25 days to today which is Aug 22 2015
return someDate;
为此,我建议您使用moment.js库!我不明白你为什么要在addDays
中的月份中加减1?当您使用setDate()
时,如果日期超过当月天数,它将自动调整月份。谢谢,我的意思是初始化某个日期以供使用。非常好,谢谢。我明白我做错了什么,所以感谢大家的理解和帮助。
var d = new Date(); //July 28 2015
d = addDays(d,28); //Aug 25 2015,works because we added 28 days to today
d = addDays(d,28); //Aug 22 2015!! Looks wrong, but is it?
/*more code*/
var moreDate = new Date(yyyy, mm - 1, dd); //Aug 25 2015
var someDate = new Date(); //Catch!! July 28 2015
someDate.setDate(moreDate.getDate() + qty); //Catch!!
//the call above added 28+25 days to today which is Aug 22 2015
return someDate;