Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript日期添加不正确_Javascript - Fatal编程技术网

JavaScript日期添加不正确

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

我有一个当前日期和一个变量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 * 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
ter
i=4
结果将越来越多,但它仍然无法解释
2020-05-03
i=4
,因为执行
currentDate.setDate(32)
2019-08-31
上的
2019-09-01
应该会导致
2019-09-01
。哦,是的,对于那个部分,我也不能复制,有一些信息缺失,可能是因为
这个.datePipe.transform
的工作原理,@jadeite1000最好澄清一下