在我的 html 网站上,我想根据当前数据显示下一次讲座的日期。
假设存在以下日期:
2024 年日历第 42 周:2024 年 10 月 14 日
2024 年日历第 43 周:2024 年 10 月 21 日
2025 年日历第 3 周:2025 年 1 月 14 日
我将以下代码添加到我的 html 文件中,但这不起作用。 请注意,我对此完全陌生。
<p id="demo"></p>
<script>
function getDateWeek(date) {
const currentDate =
(typeof date === 'object') ? date : new Date();
const januaryFirst =
new Date(currentDate.getFullYear(), 0, 1);
const daysToNextMonday =
(januaryFirst.getDay() === 1) ? 0 :
(7 - januaryFirst.getDay()) % 7;
const nextMonday =
new Date(currentDate.getFullYear(), 0,
januaryFirst.getDate() + daysToNextMonday);
return (currentDate < nextMonday) ? 52 :
(currentDate > nextMonday ? Math.ceil(
(currentDate - nextMonday) / (24 * 3600 * 1000) / 7) : 1);
}
</script>
<script>
const currentDate = new Date();
const weekNumber = getDateWeek();
let nextSession;
switch (weekNumber) {
case weekNumber <= 42:
nextSession = "October 14, 2024";
break;
case weekNumber > 42 & weekNumber <= 43:
nextSession = "October 21, 2024";
break;
case weekNumber > 43:
nextSession = "January 14, 2025";
break;
}
document.getElementById("demo").innerHTML = "Nächster Termin: " + nextSession;
</script>
您的方向有点正确,但我注意到的一些关键问题如下所述
问题
我可以指出的一些关键是你如何使用
switch
语句,switch statemnets不适用于你提供的条件,如果/else就足够了,如果你有一个定义的情况,比如切换到情况1,你只需要使用switch或 2 等
您使用
bitwise
运算符 & 而不是逻辑 &&
(和):您应该使用 &&
您需要能够知道如何计算感兴趣年份的周数。
话虽如此,这里是如何解决这个问题,您可能需要根据您的喜好进行修改,但这无论如何都是正确的。我已经制作了
lectureDates
,以便您可以定义您想要的内容,因为我不知道它们的出现频率。所以我提供了一个列表供您修改。
这里有一个代码片段来指导您,我也稍微修改了您的代码
const lectureDates = [
{ week: 42, date: "October 14, 2024" },
{ week: 43, date: "October 21, 2024" },
{ week: 3, date: "January 14, 2025" },
];
// a func to calculate the current week number of the year...
function getWeekNumber(date) {
const currentDate = typeof date === "object" ? date : new Date();
const januaryFirst = new Date(currentDate.getFullYear(), 0, 1);
const daysToNextMonday =
januaryFirst.getDay() === 1 ? 0 : (7 - januaryFirst.getDay() + 1) % 7;
const nextMonday = new Date(
currentDate.getFullYear(),
0,
januaryFirst.getDate() + daysToNextMonday
);
const weekNumber =
Math.ceil((currentDate - nextMonday) / (24 * 3600 * 1000) / 7) + 1;
return weekNumber;
}
// Get the current week number
const currentDate = new Date();
const currentWeek = getWeekNumber(currentDate);
let nextSession = "No lectures today happy days ahead...";
// Find the next lecture date
for (const lectureDate of lectureDates) {
if (lectureDate.week >= currentWeek) {
nextSession = lectureDate.date;
break;
}
}