所以,我需要收集本周的所有日子,從周日到周六,我開始制作一個代碼,該代碼采用實際日期并制作一個 for 回圈將每一天推入一個陣列,問題是像這樣的幾周(在一個月內開始并在另一個月內完成)代碼將無法正常作業。
這是代碼:
const createWeek = async() => {
const d = new Date();
let month = d.getMonth() 1;
let year = d.getFullYear();
const inicialDate = d.getDate() - d.getDay();
const lastDate = inicialDate 6;
console.log(d, 'current date')
let firstDay = new Date(d.setDate(inicialDate));
let lastDay = new Date(d.setDate(lastDate))
let week = []
for (let i = firstDay.getDate(); i <= lastDay.getDate(); i ) {
week.push(`${i.toLocaleString().length <= 1 ? "0" i : i}${month.toLocaleString().length <= 1 ? "0" month : month}${year}`);
}
return week;
}
所以我知道問題是因為在我的 for 回圈中,一周的第一天大于一周的最后一天,但我不知道如何處理。我想知道什么是最好的方法。
謝謝你的幫助。
uj5u.com熱心網友回復:
我建議使用Date.setDate()每天調整,這也將正確調整月份。
我們首先獲取 weekStart 日期,從 currentDate.getDate() 中減去 currentDay.getDay() 的結果并將其用作 setDate() 的輸入。
然后我們可以使用它Array.from()來生成我們的 7 天串列。
我建議首先創建一個包含七個日期的陣列,然后創建一個自定義格式化函式,例如formatDate()為此目的。這使我們能夠分離創建和顯示日期的邏輯。
function createWeek(currentDay = new Date()) {
const weekStart = new Date(currentDay);
weekStart.setDate(currentDay.getDate() - currentDay.getDay());
return Array.from( { length: 7 }, (v,k) => {
const dt = new Date(weekStart);
dt.setDate(weekStart.getDate() k);
return dt;
})
}
function formatDate(date) {
return [date.getDate(), date.getMonth() 1, date.getFullYear()]
.map(n => (n '').padStart(2, '0'))
.join('');
}
const weekDates = createWeek();
console.log('Formatted dates:')
for(let date of weekDates) {
console.log(formatDate(date));
}
.as-console-wrapper { max-height: 100% !important; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/436125.html
標籤:javascript 反应 打字稿 日期 for循环
上一篇:如何處理“Noinstancefor(Control.Monad.IO.Class.MonadIO[])”錯誤?
下一篇:類中的getter始終未定義
