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

Scala中不转换为Date类型如何比较字符串日期判断月份差

字符串日期比较(不转Date类型)实现方案

前提说明

给定两个固定为YYYY-MM-DD格式的字符串日期:

  • a = '2021-05-23'(原题输入漏写末尾单引号,已修正格式)
  • b = '2021-04-24'(原题输入末尾误写双引号,已修正格式)
    要求不允许将字符串转换为Date类型,实现函数判断:当b比a的日期大1个自然月时返回true,否则返回false。

实现思路

因为日期字符串是严格的年-月-日横杠分隔格式,直接拆分字符串提取年、月、日的数值做算术运算即可,完全不需要依赖Date对象:

  1. 将两个日期字符串按-分割,分别转成整数类型的年、月、日
  2. 用「年*12 + 月」的方式计算两个日期的总月份值,差值为1才满足月份差要求
  3. 根据业务需求补充日期部分的判断:如果要求b的日期不早于a的月度对日,再加一层日字段的数值比较即可

代码实现(JavaScript)

function isBGreaterThanAByOneMonth(a, b) {
  // 拆分提取年/月/日整数值
  const [aYear, aMonth, aDay] = a.split('-').map(numStr => parseInt(numStr, 10));
  const [bYear, bMonth, bDay] = b.split('-').map(numStr => parseInt(numStr, 10));

  // 校验月份差恰好为1,自动兼容跨年场景
  const totalMonthDiff = (bYear * 12 + bMonth) - (aYear * 12 + aMonth);
  if (totalMonthDiff !== 1) return false;

  // 若业务规则为「只要跨1个自然月就算,无需对齐日期」,删除下面这行判断直接返回true即可
  return bDay >= aDay;
}

测试用例参考

  • 入参a='2021-05-23', b='2021-06-23' → 返回true
  • 入参a='2021-05-23', b='2021-06-22' → 返回false
  • 入参a='2021-12-03', b='2022-01-05' → 返回true(跨年场景正常识别)
  • 入参a='2021-05-23', b='2021-04-24' → 返回false(即题目给出的b值,月份差为-1不满足要求)

注意:如果输入的字符串可能存在格式不合法、前后多余引号/空格的情况,可以在拆分前先加一步字符串清洗,用replace方法去掉非数字和横杠的字符即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:18:20