如何实现输入课程日期后计算并显示剩余天数?
解决方案
下面是完整的可运行代码,能实现你需要的功能,同时处理了无效输入、日期已过期等边界情况:
function calculateRemainingDays(startDateStr) { // 转换用户输入为日期对象,统一重置为UTC零点避免时区偏差 const startDate = new Date(startDateStr); const today = new Date(); today.setUTCHours(0, 0, 0, 0); startDate.setUTCHours(0, 0, 0, 0); // 校验输入日期是否有效 if (isNaN(startDate.getTime())) { return "请输入有效的日期(格式如:2022-09-05)"; } // 计算毫秒级时间差,转换为天数 const timeDifference = startDate.getTime() - today.getTime(); const daysLeft = Math.ceil(timeDifference / (1000 * 60 * 60 * 24)); // 根据不同情况返回对应提示 if (daysLeft < 0) { return `课程已经开始${Math.abs(daysLeft)}天了`; } else if (daysLeft === 0) { return "课程今天开始!"; } else { return `距离课程开始还有${daysLeft}天`; } } // 交互流程 const courseStartDate = prompt("课程何时开始?"); const result = calculateRemainingDays(courseStartDate); console.log(result);
关键细节说明:
- 时区处理:通过
setUTCHours把两个日期都重置为当天零点,避免因为本地时区或者当天的时间(比如现在是下午,而课程日期是当天上午)导致天数计算出错。 - 无效输入拦截:用
isNaN(startDate.getTime())判断输入是否是合法日期,彻底解决你之前遇到的NaN问题。 - 场景覆盖:不仅支持未来日期,还处理了课程已过期、当天开课的情况,提示信息更贴合实际。
内容的提问来源于stack exchange,提问作者Total Newb
相关产品推荐
相关产品推荐

