Ruby实现:判断数组中所有日期字符串是否在指定日期范围内
判断数组中所有日期是否都在指定范围内
嘿,这个问题我碰到过好多次了,其实核心逻辑很清晰,我给你两种靠谱的实现方式,按需选就行!
核心思路
不管用哪种方法,本质都是逐个检查数组里的每个日期,确认它大于等于起始日期,且小于等于结束日期。关键在于怎么把日期转换成可比较的形式。
方法1:用Date对象比较(兼容性强,适合各种日期格式)
如果你的日期字符串格式不一定是标准的YYYY-MM-DD,或者想更稳妥,就用Date对象来转换和比较:
function areAllDatesInRange(dateArray, startDateStr, endDateStr) { // 先把起止日期转成Date实例 const startDate = new Date(startDateStr); const endDate = new Date(endDateStr); // 处理空数组的情况(根据你的业务需求调整返回值) if (dateArray.length === 0) { return true; } // 遍历数组逐个检查 for (const dateStr of dateArray) { const currentDate = new Date(dateStr); // 只要有一个日期不在范围内,直接返回false if (currentDate < startDate || currentDate > endDate) { return false; } } // 所有日期都符合条件,返回true return true; } // 测试一下 const testDates = ['2018-03-28', '2018-02-18', '2018-01-10']; const rangeStart = '2018-01-01'; const rangeEnd = '2018-03-28'; console.log(areAllDatesInRange(testDates, rangeStart, rangeEnd)); // 输出true
方法2:直接比较字符串(高效,仅限标准YYYY-MM-DD格式)
如果你的日期字符串都是YYYY-MM-DD这种标准格式,那可以直接比较字符串!因为这种格式的字符串字典序和时间顺序完全一致,不用转Date对象,性能更好:
function areAllDatesInRange(dateArray, startDateStr, endDateStr) { if (dateArray.length === 0) { return true; } for (const dateStr of dateArray) { // 直接用字符串比较大小 if (dateStr < startDateStr || dateStr > endDateStr) { return false; } } return true; }
注意事项
- 如果你用Date对象,要注意某些旧浏览器对非标准日期格式的解析问题,但
YYYY-MM-DD是所有现代浏览器都支持的。 - 空数组的处理:默认返回
true,如果你的业务里认为空数组不符合条件,改成返回false就行。
内容的提问来源于stack exchange,提问作者Fatna
相关产品推荐
相关产品推荐

