Question 2. 万年历问题
输入年份、月份、日期,计算下一天的日期
算法思想
首先校验输入的日期,确定其符合规范后,再结合各种现实约束,计算下一天的日期。
代码实现
function calendarProblem(year: number, month: number, day: number): string {
if (year < 1900 || year > 2100) {
return "年份数值越界"
}
if (month <= 0 || month > 12) {
return "月份数值越界"
}
const monthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] as const
let isLeap = 0
if (year % 400 == 0) {
isLeap = 1
} else if (year % 100 != 0 && year % 4 == 0) {
isLeap = 1;
}
monthDays[1] += isLeap
const maxDays = monthDays[month - 1]
if (day <= 0 || day > maxDays) {
return "日期数值越界"
}
const result = [year, month, day + 1] as const
if (day == maxDays) {
result[2] = 1
result[1]++
}
if (result[1] > 12) {
result[1] = 1
result[0]++
}
return result[0] + "/" + result[1] + "/" + result[2]
}