JavaScript日期添加不正确
我有一个当前日期和一个变量I,它是增量I++,但当前日期在I=4之前是正确的。因此,我的当前日期为2019年8月29日+4=2020-05-03,这是不正确的。应该是2019年1月9日,但实际上是2020年5月3日JavaScript日期添加不正确,javascript,Javascript,我有一个当前日期和一个变量I,它是增量I++,但当前日期在I=4之前是正确的。因此,我的当前日期为2019年8月29日+4=2020-05-03,这是不正确的。应该是2019年1月9日,但实际上是2020年5月3日 listOfEvents(daysOn: number, daysOff: number, cycles: number,startDate: Date): Date[] { let totalDays: number; totalDays = daysOn * c
listOfEvents(daysOn: number, daysOff: number, cycles: number,startDate: Date): Date[]
{
let totalDays: number;
totalDays = daysOn * cycles + daysOff;
let totalDaysList = new Array();
let currentDate: Date;
currentDate = new Date(this.startDate);
currentDate.setHours(0,0,0,0);
let i:number = 0;
currentDate.setDate(startDate.getUTCDate() + i);
let currentDateOnly: string;
currentDate.setHours(0,0,0,0);
currentDateOnly = this.datePipe.transform(currentDate, 'yyyy-MM-dd');
totalDaysList.push(currentDateOnly);
for(i=1; i<totalDays; i++)
{
currentDate.setHours(0,0,0,0);
currentDate.setDate(this.startDate.getUTCDate() + i);
//currentDate.setDate(this.startDate.getDate() + i);
currentDateOnly = this.datePipe.transform(currentDate, 'yyyy-MM-dd');
totalDaysList.push(currentDateOnly);
}
console.log(totalDaysList);
return totalDaysList;
}
事件列表(daysOn:number,daysof:number,cycles:number,startDate:Date):日期[]
{
总天数:个数;
总天数=daysOn*周期+daysOff;
让totalDaysList=新数组();
当前日期:日期;
currentDate=新日期(this.startDate);
currentDate.setHours(0,0,0,0);
设i:number=0;
currentDate.setDate(startDate.getUTCDate()+i);
让currentDateOnly:字符串;
currentDate.setHours(0,0,0,0);
currentDateOnly=this.datePipe.transform(currentDate,'yyyyy-MM-dd');
totalDaysList.push(仅限CurrentDate);
对于(i=1;i这是因为setDate(32)
自动溢出并增加月份,因此循环基本上是
currentDate.setDate(30);//2019-09-30
currentDate.setDate(31);//2019-09-31->2019-10-01
currentDate.setDate(32);//2019-10-01->2019-11-01
currentDate.setDate(33);//2019-11-33->2019-12-03
currentDate.setDate(34);//2019-12-34->2020-01-03
每增加一个月
试着改变
currentDate.setDate(this.startDate.getUTCDate()+i);
//到
currentDate.setDate(currentDate.getDate()+1);
注意,由于时区的原因,getUTCDate可能无法工作
您是否能够创建导致相同问题的最小设置,例如,如果创建类似以下内容,则会发生相同的情况:让startDate=new Date('2019-08-29T00:00:00');让currentDate=new Date(startDate);currentDate.setHours(0,0,0,0);currentDate.setDate(startDate.getUTCDate()+4)
?这一年变成了2020
,这很奇怪,我无法重现。但这肯定会导致以startDate.getUTCDate()开头的日期错误+i
大于给定月份currentDate
此时的最大日期,这是意料之中的。请尝试在for循环中使用i
以外的内容。我的意思是确保外部i
存在范围问题,而您的溢出语句为真,这并不能解释从2019-08-31
到2020-05-03
一步到位。以及为什么它位于screenshot@t.niese每次<代码>设置日期(31)调用时,currentDate
溢出,当它被多次调用时,所有值相加到2020。根据图像,它从2019-08-29开始,因此它将是currentDate.setDate(30)
,currentDate.setDate(31)
,currentDate.setDate(32)
,对于32
来说,它将在8月份超流。图中显示2019-08-29
,2019-08-30
,2019-08-31
,2020-05-03
。预计在2019-08-31
之后会发生溢出,但它会导致2020-05-03
是意外的,因为i=4
teri=4
结果将越来越多,但它仍然无法解释2020-05-03
在i=4
,因为执行currentDate.setDate(32)2019-08-31
上的2019-09-01
应该会导致2019-09-01
。哦,是的,对于那个部分,我也不能复制,有一些信息缺失,可能是因为这个.datePipe.transform
的工作原理,@jadeite1000最好澄清一下