新浪博客

S7-1200计算两个日期之间的天数

2016-11-21 17:04阅读:
m1=(month_start+9);
m2=(month_end+9);
y1=year_start-m1/10;
y2=year_end-m2/10;
如下图:
S7-1200计算两个日期之间的天数
d1=365*y1+y1/4-y1/100+y1/400+(m1*306+5)/10+(da_start-1);
d2=365*y2+y2/4-y2/100+y2/400+(m2*306+5)/10+(da_end-1);
如下图:
S7-1200计算两个日期之间的天数
d2-d1;
如下图:
S7-1200计算两个日期之间的天数

算法解析:
该算法总体思想是计算给定日期到公元元年3月1日的天数,然后相减,获取天数的间隔。
m1 = (month_start + 9) % 12
用于判断日期是否大于3月(2月是判断闰年的标识),还用于纪录到3月的间隔月数。
y1 = year_start - m1/10
判断如果是1月和2月,则不包括当前年(因为是计算到0年3月1日的天数)。
d1 = 365*y1 + y1/4 - y1/100 + y1/400 + (m1*306 + 5)/10 + (day_start - 1)
其中 365*y1 是不算闰年多出那一天的天数。
y1/4 - y1/100 + y1/400
是加所有闰年多出的那一天,四年一润,百年不润,四百年再润。
(m2*306 + 5)/10
用于计算到当前月到3月1日间的天数,306=365-31-28(1月和2月)
5是全年中不是31天月份的个数,【31、28/29、31、30、31、30、31、31、30、31、30、31】。
(day_start - 1)
用于计算当前日到1日的间隔天数。

我的更多文章

下载客户端阅读体验更佳

APP专享