You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中比较日期字符串?星座判断函数异常求助

问题分析
  • 条件判断上下限完全写反:每个else if里的<=和>=对应的数值搞反了,比如第一个条件date <= '20.04' && date >= '21.03',没有任何日期能同时满足小于等于'20.04'且大于等于'21.03'(字符串比较中'21.03' > '20.04'),导致所有条件都无法匹配,最终只会走到else返回'Fish'。
  • 日期格式导致比较逻辑错误:用日.月格式的字符串比较日期完全不可靠,比如'31.01'(1月31日)字符串比较会大于'01.02'(2月1日),但实际日期更早,根本没法正确判断先后。
  • 变量未声明:zodiak_name没加let/const声明,会污染全局作用域。
  • 星座范围与名称错误:部分星座的日期范围不对,还使用了非标准的英文名称(比如Twins应为Gemini,Lion应为Leo等)。
修复后的代码
function getZodiac(dateStr) {
  // 把输入的"日.月"转成"月.日",保证字符串比较逻辑正确
  const [day, month] = dateStr.split('.');
  const formattedDate = `${month}.${day}`;
  
  let zodiacName;

  if (formattedDate >= '03.21' && formattedDate <= '04.19') {
    zodiacName = 'Aries(白羊座)';
  } else if (formattedDate >= '04.20' && formattedDate <= '05.20') {
    zodiacName = 'Taurus(金牛座)';
  } else if (formattedDate >= '05.21' && formattedDate <= '06.20') {
    zodiacName = 'Gemini(双子座)';
  } else if (formattedDate >= '06.21' && formattedDate <= '07.22') {
    zodiacName = 'Cancer(巨蟹座)';
  } else if (formattedDate >= '07.23' && formattedDate <= '08.22') {
    zodiacName = 'Leo(狮子座)';
  } else if (formattedDate >= '08.23' && formattedDate <= '09.22') {
    zodiacName = 'Virgo(处女座)';
  } else if (formattedDate >= '09.23' && formattedDate <= '10.23') {
    zodiacName = 'Libra(天秤座)';
  } else if (formattedDate >= '10.24' && formattedDate <= '11.22') {
    zodiacName = 'Scorpio(天蝎座)';
  } else if (formattedDate >= '11.23' && formattedDate <= '12.21') {
    zodiacName = 'Sagittarius(射手座)';
  } else if (formattedDate >= '12.22' || formattedDate <= '01.19') {
    zodiacName = 'Capricorn(摩羯座)';
  } else if (formattedDate >= '01.20' && formattedDate <= '02.18') {
    zodiacName = 'Aquarius(水瓶座)';
  } else {
    zodiacName = 'Pisces(双鱼座)';
  }

  return zodiacName;
}
修复说明
  1. 修正条件逻辑:把每个星座的日期范围上下限调整正确,确保判断逻辑能触发。
  2. 调整日期格式:将输入的"日.月"转为"月.日",这样字符串比较时会先按月份排序,再按日期排序,符合实际日期的先后顺序。
  3. 规范变量声明:用let声明zodiacName,避免污染全局变量。
  4. 修正星座信息:改用标准的星座英文名称,同时调整到通用的日期范围(比如摩羯座跨12月和1月,用||处理跨年度的情况)。

内容的提问来源于stack exchange,提问作者Ilya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 04:24:11