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

使用Noda Time的Period.Between()计算日期差返回11个月而非12个月的问题

问题原因

Noda Time的Period.Between方法计算的是两个日期之间的完整月份差值,而非包含起止月份的自然月总数。

拿你的例子来说:2023-01-01到2023-12-31,虽然横跨了12个自然月,但Period.Between只会统计从起始日期到结束日期之间完整走完的月份数。从1月1日到12月1日是11个完整的月(每个月都到了对应日期),而12月1日到12月31日的这段时间并没有完成一个完整的月份,所以返回11。

解决方法

如果你需要统计两个日期覆盖的自然月总数(比如1月到12月算12),直接通过年份和月份的数值计算就行,不用依赖Period.Between:

int numberOfMonths = (endDate.Year - startDate.Year) * 12 + (endDate.Month - startDate.Month) + 1;

这个公式的逻辑很直接:

  • 先算年份差对应的总月份数:(结束年份 - 起始年份) * 12
  • 加上同一年里的月份差:结束月份 - 起始月份
  • 最后加1,把起始月份也包含进去

代入你的日期计算:(2023-2023)*12 + (12-1) +1 = 0 +11 +1=12,正好符合你的预期。

要是你的需求本来就是计算两个日期之间的月份跨度(不含起始月),那原来的Period.Between结果是对的,这种情况下1月到12月的跨度就是11个月。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:00:00