ค้นหาเว็บไซต์

การเพิ่มวันลงในวันที่ใน JavaScript/TypeScript ทำให้ได้วันที่ที่ผิดพลาดอย่างสิ้นเชิง


ฉันมีโค้ดง่าย ๆ นี้ และมันใช้งานได้บางครั้ง แต่บางครั้งมันก็ให้วันที่ผิดทั้งหมด:

  addDays(date: Date, days: number): Date {
    console.log('adding ' + days + ' days');
    console.log(date);
    date.setDate(date.getDate() + days);
    console.log(date);
    return date;
  }

นี่คือตัวอย่างของผลลัพธ์:

ใช้ได้!

adding 7 days
error-chart.component.ts:118 Tue Aug 02 2016 00:00:00 GMT+0200 (Vest-Europa (sommertid))
error-chart.component.ts:120 Tue Aug 09 2016 00:00:00 GMT+0200 (Vest-Europa (sommertid))

หยุดทำงาน:

adding 14 days
error-chart.component.ts:118 Tue Aug 02 2016 00:00:00 GMT+0200 (Vest-Europa (sommertid))
error-chart.component.ts:120 Thu Mar 02 2017 00:00:00 GMT+0100 (Vest-Europa (normaltid))

กระโดดข้ามไป 2 ปี อย่างใดอย่างหนึ่ง

adding 14 days
error-chart.component.ts:118 Thu Jul 07 2016 00:00:00 GMT+0200 (Vest-Europa (sommertid))
error-chart.component.ts:120 Thu Jun 14 2018 00:00:00 GMT+0200 (Vest-Europa (sommertid))

ตอนนี้ 4 ปีแล้ว!

adding 14 days
error-chart.component.ts:118 Thu Jun 14 2018 00:00:00 GMT+0200 (Vest-Europa (sommertid))
error-chart.component.ts:120 Thu Apr 14 2022 00:00:00 GMT+0200 (Vest-Europa (sommertid))

คำตอบ #1

คุณมีปัญหาเกี่ยวกับประเภทข้อมูล หาก days เป็น 14 จะได้วันที่ 16 สิงหาคมอย่างถูกต้อง อย่างไรก็ตาม หาก days เป็น "14" จะได้วันที่ 2 มีนาคม

วิธีแก้ปัญหา :

  addDays(date: Date, days: number): Date {
    console.log('adding ' + days + ' days');
    console.log(date);
    date.setDate(date.getDate() + parseInt(days));
    console.log(date);
    return date;
  }

บทความที่เกี่ยวข้อง