好吧,我需要得到两个代表两个完整日期之间距离的值(仅限小时/时间)......在MySQL上,我们有PERIOD_DIFF
得到两个日期之间的差异(只有月份和年份) ),但我也需要包括这一天。
我有两个日期:
2011-12-05
和2012-01-10
。在2012-01-05
之后,我有1个月,更长的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
不是;
我不知道我需要做什么来解决这个问题。
答案 0 :(得分:3)
尝试这样的事情:
SET @start = '2013-03-31';
SET @end = '2013-04-30';
-- date @start is last day of month ?
SET @start_last = @start = LAST_DAY(@start);
-- date @end is last day of month ?
SET @end_last = @end = LAST_DAY(@end);
-- checking if difference is more than month
SET @month_or_more =IF(@start_last AND @end_last OR DAY(@start) = DAY(@end), DATE_ADD(@start, INTERVAL 1 MONTH) <= @end, DATE_ADD(@start, INTERVAL 1 MONTH) < @end);
-- diff in months
SET @m_num = IF(@month_or_more, PERIOD_DIFF( DATE_FORMAT(@end, '%Y%m'), DATE_FORMAT(@start, '%Y%m')), 0);
-- diff in days
SET @d_num = DATEDIFF(DATE_ADD(@start, INTERVAL @m_num MONTH), @end);
SELECT ABS(@m_num) as month, ABS(@d_num) as days;
// 编辑修正版
答案 1 :(得分:2)
将总差异的变量设置为0。
使用DATEDIFF
在开始日期和结束日期之间获得天数差异。
每个月 您的开始和结束月份(如果之间有任何月份),请使用LAST_DAY
和DATEDIFF
来计算该月的天数。
从天数总差异中减去该月的天数,并将添加1 减去总差异个月强>