从1990年1月1日开始,3天打鱼,2天晒网。输入任意一个日期(格式为xxxx-xx-xx),判断那天是打鱼还是晒网。打鱼返回’He is working’,晒网返回 ‘He is having a rest’。日期或格式不正确输出’Invalid input’。
function fishOrRest (string) {
let arr = string.split('-').map(item => Number(item))
let [year, month, day] = arr
if (Number.isNaN(year) || Number.isNaN(month) || Number.isNaN(day)) return 'Invalid input'
// 通常性错误
if (year < 1990 || (month <= 0 || month > 12) || (day <= 0 || day > 31)) {
return 'Invalid input'
}
// 判断到输入年份为止,经过了几个闰年
let runnianTimes = (year < 1992) ? 0 : (Math.floor((year - 1992) / 4) + 1)
// 输入年份之前所有天数
let sum = (year - 1990) * 365 + runnianTimes
// 判断输入年份当年是否是闰年
let runFlag = !!((((year % 4) === 0 && (year % 100) !== 0) || (year % 400) === 0))
// 特殊性错误
// 4、6、9、11月份天数不能超过30天
if ((month === 4 || month === 6 || month === 9 || month === 11) && (day > 30)) {
return 'Invalid input'
}
// 闰年2月不能超过29,平年2月不能超过28
if (runFlag && (month === 2) && (day > 29)) {
return 'Invalid input'
} else if (!runFlag && (month === 2) && (day > 28)) {
return 'Invalid input'
}
// 根据月份判断到该月之前共有多少天
switch (month) {
case 12:
sum += 30
case 11:
sum += 31
case 10:
sum += 30
case 9:
sum += 31
case 8:
sum += 31
case 7:
sum += 30
case 6:
sum += 31
case 5:
sum += 30
case 4:
sum += 31
case 3:
// 平年或闰年二月
runFlag ? (sum += 29) : (sum += 28)
case 2:
sum += 31
case 1:
sum += 0
}
// 输入月份月天数
sum += day
let r = sum % 5
if (r === 1 || r === 2 || r === 3) {
return 'He is working'
} else {
return 'He is having a rest'
}
}