我有以下代碼,我想回傳接下來 10 天的增量日期
const startingDay = new Date('2021-10-29');
const thisDay = new Date(startingDay);
for(var i=1; i<10; i ) {
thisDay.setDate(startingDay.getDate() i);
console.log(thisDay);
}
這很好,但出于某種原因,一旦它到達 10 月 31 日,它就會在幾個月而不是幾天內開始上升。
為什么會這樣?
謝謝
uj5u.com熱心網友回復:
for(var i=1; i<10; i ) {
thisDay.setDate(startingDay.getDate() i);
由于您是從1to回圈i < 10,因此隨著回圈的進行,您將添加更多天數。
我想回傳未來 10 天的增量日期
那么,為什么更新thisDay與startingDay.getDate() i如果你可以使用thisDay.getDate() 1:
const startingDay = new Date('2021-10-29');
const thisDay = new Date(startingDay);
for(var i=1; i<10; i ) {
thisDay.setDate(thisDay.getDate() 1);
console.log(thisDay);
}
"2021-10-30T00:00:00.000Z"
"2021-10-31T00:00:00.000Z"
"2021-11-01T01:00:00.000Z"
"2021-11-02T01:00:00.000Z"
"2021-11-03T01:00:00.000Z"
"2021-11-04T01:00:00.000Z"
"2021-11-05T01:00:00.000Z"
"2021-11-06T01:00:00.000Z"
"2021-11-07T01:00:00.000Z"
uj5u.com熱心網友回復:
稍微改變你的邏輯會給你想要的行為, setDate() 不會像你期望的那樣對同一個日期實體進行多次呼叫。
原因是,從 11 月 1 日開始,在第 4 次迭代中,我們將日期設定為 33 (29 4)。setDate 使用的邏輯是將日期提前到下個月,12 月,因為 11 月只有 30 天,然后再提前 2 天到 12 月 3 日。后續迭代也會發生同樣的效果。
通過thisDay在每次迭代中重新創建變數,setDate 使用的邏輯將按預期作業。
const startingDay = new Date('2021-10-29');
for(var i= 1; i < 10; i ) {
let thisDay = new Date(startingDay);
thisDay.setDate(startingDay.getDate() i);
console.log(thisDay);
}
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
閱讀https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate的檔案。
如果您提供的值超出當月的范圍,它將自動切換到下個月或上個月。這使得在添加天數時更容易在月份之間跳轉。
但是按照您撰寫示例的方式,您總是從原始日期的那一天開始,但編輯第二個日期:
我:1 | 日期 = 2021-10-29 -> 將日期設定為 30 號 -> 日期 = 2021-10-30
我:2 | 日期 = 2021-10-30 -> 將日期設定為 31 日 -> 日期 = 2021-10-31
我:3 | 日期 = 2021-10-31 -> 將日期設定為 32 日 -> 日期 = 2021-11-01,因為 oct 只有 31 天
我:4 | 日期 = 2021-11-01 -> 將日期設定為 33 日 -> 日期 = 2021-12-03,因為 11 月有 30 天,所以在 11 月的第一天加上 33 天,我們得到了 12 月 3 日
uj5u.com熱心網友回復:
為了避免由于月份切換而導致的錯誤日期,您可以Date()自行解決。
const startingDay = new Date('2021-10-29');
let thisDay = new Date(startingDay);
for(let i = 1; i<10; i ) {
thisDay = new Date(Date.now() i * 24 * 60 * 60 * 1000);
console.log(thisDay.getDate());
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/343074.html
標籤:javascript 循环 日期 循环
上一篇:回圈特定列的索引
下一篇:從特定行回圈PS
