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

如何用date-fns计算入住日期分属两个季节的天数

分季节计算入住天数(基于date-fns实现)

直接用date-fns的eachDayOfInterval遍历入住期间的每一天,结合月份判断归属季节,就能统计出两个季节的天数,具体实现如下:

核心思路

  1. 用eachDayOfInterval生成入住日到退房日的所有日期数组
  2. 定义季节判断规则:date-fns的月份是0基(0=1月,4=5月,8=9月,9=10月,3=4月),因此5-9月对应月份>=4且<=8,其余为10月至次年4月的季节
  3. 遍历日期数组,分别统计两个季节的天数

代码实现

import { eachDayOfInterval, getMonth, subDays } from 'date-fns';

// 判断日期是否属于5-9月的季节
const isInWarmSeason = (date) => {
  const month = getMonth(date);
  return month >= 4 && month <= 8;
};

// 计算分季节入住天数
// 注:默认包含退房日,若要排除退房日,将end改为subDays(checkOut, 1)
const calculateSeasonStayDays = (checkIn, checkOut) => {
  const stayDays = eachDayOfInterval({ start: checkIn, end: checkOut });
  
  let warmSeasonDays = 0;
  let coolSeasonDays = 0;
  
  stayDays.forEach(day => {
    isInWarmSeason(day) ? warmSeasonDays++ : coolSeasonDays++;
  });
  
  return { warmSeasonDays, coolSeasonDays };
};

// 使用示例
const checkInDate = new Date('2024-09-28');
const checkOutDate = new Date('2024-10-05');
const seasonDays = calculateSeasonStayDays(checkInDate, checkOutDate);
console.log(`5-9月季节天数:${seasonDays.warmSeasonDays},10-次年4月季节天数:${seasonDays.coolSeasonDays}`);
// 输出:5-9月季节天数:3,10-次年4月季节天数:5

补充说明

  • 跨年度场景自动兼容:比如入住日为2024年12月,退房日为2025年3月,所有日期都会被正确归类到10-次年4月的季节
  • 若业务逻辑中退房当天不算入住天数,只需修改eachDayOfInterval的end参数为subDays(checkOut, 1)即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:15:41