JS判断两个日期是否跨年或跨月的三种方法

作者:木棉时间:2026-10-26 12:53:19浏览:142

本文介绍在JavaScript中判断两个日期是否跨年或跨月的三种实现方式。首先利用Date对象的getFullYear和getMonth方法进行直接比较;其次演示将YYYYMMDD格式字符串截取前6位进行比对;最后结合正则表达式验证日期格式合法性。文章提供完整代码示例及注意事项,帮助开发者准确处理日期逻辑。

JS判断日期跨年跨月概述

本文旨在讲解如何使用JavaScript判断给定的两个日期(例如20230108与20230208)是否存在跨年或跨月的情况。

使用Date对象判断

一、利用Date对象进行判断。以下代码展示了通过JavaScript内置的Date对象来实现该功能的具体示例:

const date1 = new Date('2023-01-08');
const date2 = new Date('2023-02-08');

if (date1.getFullYear() !== date2.getFullYear() || date1.getMonth() !== date2.getMonth()) {
  console.log('日期跨年或跨月');
} else {
  console.log('日期不跨年也不跨月');
}

在上述代码中,首先实例化两个Date对象,分别对应2023年1月8日和2023年2月8日。接着调用getFullYear()与getMonth()方法提取各自的年份和月份数值,并对这两个数值进行对比。若年份或月份任一不相等,则判定为日期发生了跨年或跨月。

日期字符串转换比较

二、若需验证两个日期字符串是否跨年或跨月,可参考以下代码实现:

const dateString1 = '20230108';
const dateString2 = '20230208';

const date1 = new Date(`${dateString1.slice(0, 4)}-${dateString1.slice(4, 6)}-${dateString1.slice(6, 8)}`);
const date2 = new Date(`${dateString2.slice(0, 4)}-${dateString2.slice(4, 6)}-${dateString2.slice(6, 8)}`);

if (date1.getFullYear() !== date2.getFullYear() || date1.getMonth() !== date2.getMonth()) {
  console.log('日期跨年或跨月');
} else {
  console.log('日期不跨年也不跨月');
}

上述代码首先将两个日期字符串转换为对应的Date对象实例,随后执行比较操作,从而判断是否涉及跨年或跨月。

字符串截取比较法

三、除Date对象方法外,还可采用字符串比较的方式来判断日期是否跨年或跨月。具体做法是分别提取两个日期字符串中的年份和月份部分,并进行对比;若年份或月份不一致,则说明日期存在跨年或跨月现象。

以下是使用字符串比较方式的具体代码示例:

const dateString1 = '20230108';
const dateString2 = '20230208';

if (dateString1.slice(0, 6) !== dateString2.slice(0, 6)) {
  console.log('日期跨年或跨月');
} else {
  console.log('日期不跨年也不跨月');
}

在上述代码中,首先从两个日期字符串中分别提取年份和月份部分,随后进行对比以判断是否跨年或跨月。具体而言,dateString1.slice(0, 6)用于获取第一个字符串的前6个字符(即年份和月份),dateString2.slice(0, 6)同理处理第二个字符串。若这两个字符串的前6个字符不相等,则判定为日期跨年或跨月。

正则表达式验证格式

四、验证YYYYMMDD格式。若需进一步校验日期字符串是否符合指定格式(如YYYYMMDD),可使用正则表达式进行匹配。以下示例函数接收一个日期字符串和一个格式字符串,并检查日期字符串是否符合该指定格式:

function isValidDateFormat(dateStr, formatStr) {
  const regex = new RegExp(formatStr);
  return regex.test(dateStr);
}

在该函数中,利用RegExp构造函数动态创建正则表达式,该表达式由传入的格式字符串生成。随后使用test方法检测日期字符串是否匹配此正则表达式,若匹配则返回true,否则返回false。

例如,验证日期字符串是否符合YYYYMMDD格式时,可调用该函数并传入"\d{4}\d{2}\d{2}"作为格式字符串。需注意,在JavaScript字符串中反斜杠具有特殊含义,因此在正则表达式字符串中需对反斜杠进行转义处理。

以下是一个完整示例,结合前述两个函数检查两个日期字符串是否处于同一年和同一月,且符合指定格式:

function datesAreInSameMonthAndYear(dateStr1, dateStr2, formatStr) {
  if (!isValidDateFormat(dateStr1, formatStr) || !isValidDateFormat(dateStr2, formatStr)) {
    return false; // 如果日期字符串不符合指定的格式,则返回false
  }

  // 将日期字符串转换为Date对象
  const date1 = new Date(dateStr1.slice(0, 4), dateStr1.slice(4, 6) - 1, dateStr1.slice(6));
  const date2 = new Date(dateStr2.slice(0, 4), dateStr2.slice(4, 6) - 1, dateStr2.slice(6));

  // 检查日期是否在同一年和同一月
  return (date1.getFullYear() === date2.getFullYear() && date1.getMonth() === date2.getMonth());
}

function isValidDateFormat(dateStr, formatStr) {
  const regex = new RegExp(formatStr);
  return regex.test(dateStr);
}

const dateStr1 = '20230108';
const dateStr2 = '20230208';
const formatStr = '\d{4}\d{2}\d{2}';

if (datesAreInSameMonthAndYear(dateStr1, dateStr2, formatStr)) {
  console.log(`${dateStr1} and ${dateStr2} are in the same year and month.`);
} else {
  console.log(`${dateStr1} and ${dateStr2} are not in the same year and month.`);
}

在此示例中,首先定义两个日期字符串(dateStr1和dateStr2)以及一个格式字符串(formatStr)。随后调用datesAreInSameMonthAndYear函数,检查这两个日期字符串是否在同一年和同一月,同时符合指定格式。最后,依据函数返回值打印相应的提示信息。

到此这篇关于JS实现判断两个日期不能跨年和跨月的文章就介绍到这了,更多相关JS判断日期内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

作者最新文章