js实现“3天打雨,两天晒网”

从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'
  }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值