業余愛好者在這里,這個問題超出了我的工資等級。我正在嘗試構建一個動態 html / css 日歷,其中的單元格是根據今天的日期填寫的。我得到今天的日期,然后嘗試添加天數以填充另外 13 天(回圈通過 html elements.innerHTML)。
如果我嘗試 setDate(30 2) 然后 getDate()。代碼作業正常。Javascript 算出 6 月第 30 天結束,結果如愿為 2(7 月 2 日)
但這僅在只有一次呼叫時才有效,如果我有一個回圈,或者多次呼叫此代碼,那么結果就會不同。是否有一些異步的東西搞砸了作業?這是代碼:如果您離開“result2”電話并評論其他電話,效果很好,但是多次電話,事情中斷并且數字重復。請幫忙!
const theDate = new Date();
const todaysDate = 30;
theDate.setDate(todaysDate 1);
let result1 = theDate.getDate();
theDate.setDate(todaysDate 2);
let result2 = theDate.getDate();
theDate.setDate(todaysDate 3);
let result3 = theDate.getDate();
theDate.setDate(todaysDate 4);
let result4 = theDate.getDate();
console.log(result1);
console.log(result2);
console.log(result3);
console.log(result4);
uj5u.com熱心網友回復:
六月有 30 天,而七月有 31 天。
當您第一次將日期設定為 32 時,您將其設定為 6 月 32 日,而 6 月 30 日之后的日期將其設定為 7 月 2 日。(32-30=2)
當您再次設定為 32 時,已經是 7 月,因此 7 月 31 日之后的日期將其推至 8 月 1 日(32-31=1)。
uj5u.com熱心網友回復:
在回答您的問題時,該setDate()
函式的行為對您來說非常奇怪,因為每次設定日期時,您都是相對于之前的設定設定的,因此每次遞增 31、32 或 33 天,而不是 1、2 ,或 3。有關更多資訊,請參閱 @Quentin 的精彩回答,這一發現完全是他的,我只想在我的回答中提及根本原因以及我自己對您的問題的解決方法。
如果您只想生成日期,另一種解決方案:
const dayOfMonth = 30;
const date = new Date();
date.setDate(dayOfMonth);
console.log("Date:", date);
let timestamp = Date.parse(date);
for (let i = 1; i <= 14; i ) {
const newTimestamp = timestamp i * (1000 * 60 * 60 * 24);
const newDate = new Date(newTimestamp);
console.log("New date:", newDate);
}
此方法將操縱時間戳并為添加到一天中的毫秒數的每個時間戳生成新日期。
您可以在回圈中使用您的日期邏輯來填充您提到的日歷。
uj5u.com熱心網友回復:
如果您Date()
在每次迭代中使用建構式,則不必擔心特定月份的不同日期。
細節在例子中注釋
/**
* @desc - return a range of dates starting today (or a given
* date) and a given number of days (including start)
* @param {number} range - The number of days
* @param {string<date>} start - The date to start the range
* if not defined @default is today
* @return {array<date>} An array of dates
*/
function dayRange(range, start) {
// If undefined default is today
let now = start ? new Date(start) : new Date();
// Create an array of empty slots - .length === range
let rng = [...new Array(range)];
/*
.map() through array rng
If it's the first iteration add today's date...
... otherwise get tommorow's date...
and return it in local format
*/
return rng.map((_, i) => {
if (i === 0) {
return now.toLocaleDateString();
}
let day = now.getDate() 1;
now.setDate(day);
return now.toLocaleDateString();
});
}
console.log("Pass the first parameter if the start day is today");
console.log(JSON.stringify(dayRange(14)));
console.log("Pass a properly formatted date string as the second parameter if you want to start on a date other than today");
console.log(JSON.stringify(dayRange(10, '05/12/2020')));
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/493588.html
標籤:javascript html css 日期 获取日期