2014.8.28(放款时间) 20161103(输入天数) 20161128(结果)
20161129 20161228
'yy-mm-dd'
需求:计算当前日期(输入)到放款日期天数最近的还款日期,包括当天可当天还款?(规则:结果天数为放款日期的天,如果当前天数小于放款日期天数,结果年月不变(输入的年月),否则,月份加1)
结果:
SET @my_paydate = '2016-08-31';
SET @my_now = '2016-12-30';
SELECT
TIMESTAMPDIFF(MONTH,DATE_SUB(@my_paydate,INTERVAL DAYOFMONTH(@my_paydate)-1 DAY),DATE_SUB(@my_now,INTERVAL DAYOFMONTH(@my_now)-1 DAY)); --
计算两个时间差 (年,月,日...),保持准确要把计算日期调整到计算日期的1号
SELECT
PERIOD_DIFF(DATE_FORMAT(@my_now,'%Y%m'),DATE_FORMAT(@my_paydate,'%Y%m')); --
计算两个日期相差多少个月,时间格式为%Y%m
过程:
SET @my_paydate = '2014-07-31';
SET @my_now = '2016-02-03';
SELECT
IF( DAYOFMONTH(@my_now)<=DAYOFMONTH(@my_paydate),
-- before
DATE_ADD(@my_paydate,INTERVAL PERIOD_DIFF(DATE_FORMAT(@my_now,'%Y%m'),DATE_FORMAT(@my_paydate,'%Y%m')) MONTH)
,
-- after
DATE_ADD(@my_paydate,INTERVAL PERIOD_DIFF(DATE_FORMAT(@my_now,'%Y%m'),DATE_FORMAT(@my_paydate,'%Y%m'))+1 MONTH)
)
;
SET @my_paydate = '2016-08-31';
SET @my_now = '2016-12-30';
SELECT TIMESTAMPDIFF(MONTH,DATE_SUB(@my_paydate,INTERVAL DAYOFMONTH(@my_paydate)-1 DAY),DATE_SUB(@my_now,INTERVAL DAYOFMONTH(@my_now)-1 DAY));
SELECT PERIOD_DIFF(DATE_FORMAT(@my_now,'%Y%m'),DATE_FORMAT(@my_paydate,'%Y%m'));