【发布时间】:2011-12-21 19:17:44
【问题描述】:
好吧,我需要两个值来表示两个完整日期之间的距离(无小时/时间)...在 MySQL 上,我们有 PERIOD_DIFF 可以获取两个日期之间的差异(只有月份和年份),但我也需要包括这一天。
我有两个日期,例如:
-
2011-12-05和2012-01-10。在2012-01-05之后,我还有整整一个月,还有 5 天。 -
2012-01-01和2012-03-01。我有 2 个月零 0 天。 -
2012-02-29和2012-03-28¹。我有 0 个月零 28 天。 更多:1个月,我需要2012-03-29。 -
2013-01-29和2013-02-28²。我有 0 个月和 30 天。 更多:1个月内,我需要2013-03-01,因为2013-02-29不存在。 -
2013-03-31和2013-04-30。 修复:真的我有 0 个月零 30 天。 更多:1个月内,我需要2013-05-01,因为2013-04-31不存在。
¹2012 是闰年 / bissexto;
²2013不是;
我不知道我需要做什么来解决这个问题。
【问题讨论】:
-
在获得
months和PERIOD_DIFF的数量后,您可以将其添加到较小的日期,然后减去以获得天数:-) -
我错过了什么或
2013-03-31和2013-04-30我正好是1个月的时间,因为一个月的最后一天和下个月的最后一天之间的时间是一个月? -
我喜欢@zerkms 的解决方案胜过任何给出的答案:-)
-
@piotrekkr:出于某种未知原因,OP 想要
2013-03-31 - 2013-04-30=2013-03-30 - 2013-04-30=1 Month:-S -
@BRPocock 他的方法不适用于
2013-01-29 and 2013-02-28,因为 PERIOD_DIFF 会说相差 1 个月,然后您将 1 个月添加到2013-01-29并且您有2013-02-28。减法后的天数将为 0。1 month 0 days不正确。2012-02-29 and 2012-03-28(1 个月 -1 天)的相同值不正确