gpt4 book ai didi

ruby-on-rails - 为什么在一个日期上加上和减去 2 个月不会返回相同的日期?

转载 作者:数据小太阳 更新时间:2023-10-29 08:57:42 25 4
gpt4 key购买 nike

我对这个结果有点困惑,将今天的日期减去 2 个月,然后再次取那个日期并加上两个月,在将日期分配给变量时并没有给我今天的日期。

Time.zone "Eastern Time (US & Canada)"

> today = Date.today.in_time_zone
=> Thu, 31 Aug 2017 00:00:00 EDT -04:00

> a = today - 2.months # This is persisted to the db
=> Fri, 30 Jun 2017 00:00:00 EDT -04:00

> b = a + 2.months
=> Wed, 30 Aug 2017 00:00:00 EDT -04:00

但是,如果我只使用同一个对象,它会正确地来回移动:

> today = Date.today.in_time_zone
=> Thu, 31 Aug 2017 00:00:00 EDT -04:00

> today - 2.months
=> Fri, 30 Jun 2017 00:00:00 EDT -04:00

> today + 2.months
=> Tue, 31 Oct 2017 00:00:00 EDT -04:00

问题显然是当“a”被保存到数据库中,然后在稍后检索,并计算加上 2 个月...时,它应该与今天的日期匹配。

最佳答案

长话短说

一个月不是固定的期限。根据您所在的日期,添加或花费一个月不会产生相同的“时移”。

常用算法

添加或花费月份如下:

  • 尝试在开始时的同一天(4 日、30 日、31 日)登陆,只需更改月份
  • 如果您要在一个不可能的日期着陆(例如 9 月 31 日、2 月 30 日、2 月 29 日等 一些 年),那么只需使用本月允许的最大天数

这意味着添加一些月份然后减去相同数量的月份不一定会返回相同的日期。

例子:

某个月的 31 号 + 1 个月 --> 人们想要到达下个月的 31 号

但是如果没有下个月的 31 号(比如 8 月 31 号,没有 9 月 31 号),那怎么办?

通常的解释会说你想去月底,这是 9 月 30 日(例如租金或其他月度订阅)


但通常,某个月的 30 号 - 1 个月 --> 人们会想要到达上个月的 30 号。

这将导致...... 8 月 30 日。不是 8 月 31 日。

因此:某个日期 + 1 个月 - 1 个月不一定给出原始日期!


另一个例子:

从 8 月 30 日开始。

花一个月 -> 7 月 30 日

添加一个月 -> 您想要到 8 月 30 日(同一数字,下个月)还是到 8 月底?

默认算法将尝试给出同一天的数字 -> 8 月 30 日(现在更合乎逻辑)


还有天...

请注意,同样的问题会在几天内发生,但频率要低得多!当某些天的小时数不同时,对于夏令时,当添加和使用相同的天数时,您可能无法回到开始时的原始日期和时间

关于ruby-on-rails - 为什么在一个日期上加上和减去 2 个月不会返回相同的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45989874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com