JavaScript海盗风格生日程序:生日剩余天数计算功能故障求解决
海盗风格JS程序生日剩余天数功能故障排查与修复
核心问题分析
- 参数传递错误:
daysUntilNext函数需要接收month和day两个独立参数,但你直接传入了整个日期字符串,导致函数无法正确解析月份和日期。 - 日期解析错误:用
parseInt(date)处理mm/dd/yyyy格式的日期字符串,只会提取第一个数字段(比如05/20/1990会被解析为5),完全丢失了日期信息。 - 年份提取鲁棒性差:用
substring(6,10)提取年份,仅适用于两位数月份+两位数日期的输入,若用户输入单数字的月/日(比如5/5/1990),会提取错误的年份片段。
修正方案
- 将日期字符串按
/分割,拆分出月、日、年三个部分,避免依赖固定字符串位置。 - 调用
daysUntilNext时传入拆分后的月份和日期数值。 - 移除无效的
parseInt(date)代码,避免变量污染。
修正后的完整代码
var name = prompt('What\'s yer name?'); var date = prompt('What\'s yer date o\' birth? (mm/dd/yyyy)'); // 拆分日期,兼容单/双数字的月日输入 const [month, day, year] = date.split('/').map(Number); // 计算100岁年份 const hundredYearsOldYear = year + 100; console.log(`Ahoy, ${name}. It will be th\' year ${hundredYearsOldYear} when ye be 100 years barnacle-covered.`); function daysUntilNext(month, day){ var tday= new Date(), y= tday.getFullYear(), next= new Date(y, month-1, day); tday.setHours(0, 0, 0, 0); if(tday>next) next.setFullYear(y+1); return Math.round((next-tday)/8.64e7); } // 传入正确的月、日参数 var d = daysUntilNext(month, day); console.log(d+' day'+(d>1? 's': '')+' until yer birthday');
额外优化建议
- 可以增加输入验证逻辑,判断用户输入的日期格式是否合法,避免因无效输入导致程序报错。
- 用
const/let替代var,提升代码的块级作用域安全性。
内容的提问来源于stack exchange,提问作者ellie
相关产品推荐
相关产品推荐

