【发布时间】:2021-05-10 09:19:22
【问题描述】:
我想按月计算两个日期之间的距离:
问:start_date + n.months >= end_dates,变量n是什么?
start_date = Date.parse('2021-01-31')
end_date = Date.parse('2021-02-28')
## start_date + 1.months = 2021-02-28
## The answer 1 month, which is more clearable for human using
## Don't want to find the answer like 28 days or 0.93 month. (30 day a month)
首先我试着让每个月是 30.days,但是答案会对一些特殊的日期有一些偏差。每个月的日期都不一样,End of Feb month 上的日期总是问题。
然后我尝试安装像date_diff、time_difference...这样的gem,但是没有方法可以做到这一点,大部分输出是28天而不是1个月。
为了简单的方法,我可以很容易地做迭代循环来找到n,比如:
start_date = Date.parse('2021-01-31')
end_date = Date.parse('2021-02-28')
def calc_diff(start_date, end_date)
n = 0
while start_date + n.months < end_date
n += 1
end
n
end
有没有更好的方法来查找两个日期之间的 n 月份,但不使用循环?
谢谢。
【问题讨论】:
-
@AniketShivamTiwari 不,大多数答案将年份设置为每月 365 天和 30 天,或者不处理日期列(仅处理日期的月份和年份)。它会在月底(尤其是二月)引起问题。
-
当我再次想到你的问题时,我看到你的目标是
more clearable for human using这意味着从 31-1 到 29-2 是 1 个月,所以我想知道 29-2 到 31-3 是否也是仅仅 1 个月(人类的观点)还是 2 个月?
标签: ruby-on-rails ruby date