关于计算日期差的一点思路!计算工龄精确到天的方法-周伯通
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-查询/SQL语句


关于计算日期差的一点思路!计算工龄精确到天的方法

发表时间:2014/9/19 14:52:34 评论(4) 浏览(13523)  评论 | 加入收藏 | 复制
   
摘 要:一个查询计算的表达式,用来计算"工龄"(精确到天)或"离退休倒计时"
要求:  姓名      日期1        日期2        工龄1(效果) 
        路人甲    2007/4/2     2014/9/18     7年 5个月 16天 
正 文:

应  叶落潇潇  的要求,做一个查询计算的 表达式 用来计算 工龄(精确到天)或离退休倒计时

    要求:  姓名      日期1        日期2               工龄1(效果)
     
               路人甲    2007/4/2     2014/9/18     7年 5个月 16天 

              土匪乙    2007/4/22    2014/9/18     7年 4个月 27天  

              流氓丙    2007/9/20    2014/9/18     6年11个月 29天 

基本算法思路:设定为 X 年 Y 个月 Z 天
多种算法以 Z 的算法 因为每个月天数不一样,容易出现误差,

所以,此思路是取一个中间日期值,避免计算当月天数(30天 或31天)
           中间值     结论
路人甲    2014/9/2    Z = 2014/9/18 - 2014/9/2 = 16 天

土匪乙    2014/8/22   Z = 2014/9/18 - 2014/8/22 = 27 天(8月有31天)

流氓丙    2014/8/20   Z = 2014/9/19 - 2014/8/20 = 29 天


 此思路的Z 计算表达式 如下:

IIf(Day([日期2])-Day([日期1])<0,[日期2]-DateSerial(Year([日期2])
    ,Month([日期2])-1,Day([日期1])),Day([日期2])-Day([日期1]))


因为1年 12个月 是不变值,统计日期1 和日期2 的 月份总数差 结合上述日期的判定

               月份总差                          X              Y         
路人甲   2014*12+9-(2007*12+4)= 89       Int(89,12)=7    89 mod 12 =5
土匪乙   2014*12+9-(2007*12+4)-1 = 88    Int(88,12)=7    88 mod 12=4
流氓丙   2014*12+9-(2007*12+9)-1 = 83    Int(83,12)=6    83 mod 12=11

可见结论出来了,

表达式汇总如下:
IIf(Day([日期2])-Day([日期1])<0,Int((Year([日期2])*12 + Month([日期2])-(Year([日期1])*12 + Month([日期1]))-1)/12)
    & "年" & (Year([日期2])*12 + Month([日期2])-(Year([日期1])*12 + Month([日期1]))-1) mod 12 
    & "个月" & [日期2]-DateSerial(Year([日期2]),Month([日期2])-1,Day([日期1])) & "天",
    Int((Year([日期2])*12 + Month([日期2])-(Year([日期1])*12 + Month([日期1])))/12)
    & "年" & (Year([日期2])*12 + Month([日期2])-(Year([日期1])*12 + Month([日期1]))) mod 12 
    & "个月" & (Day([日期2])-Day([日期1])) & "天")


可将[日期2]或[日期1]换成Date() 即是今日;用来计算工龄或倒计时;

此为个人之见解,用以抛砖引玉!


Access软件网交流QQ群(群号:198465573)
 
 相关文章
计算时间差  【VictorDuane  2007/10/9】
[示例]时间相减得出时间差  【UMVsoft-风  2009/10/24】
【菜鸟入门】计算工龄,日期相减得出工作年限(周期)的示例\工作日示...  【麥田  2011/4/1】
Access计算两个日期之间的工作日天数的几个函数  【竹笛  2011/8/3】
[示例]计算某一段时间内的工作日和假日天数  【金宇  2012/5/12】
常见问答
技术分类
相关资源
文章搜索
关于作者

周伯通

文章分类

文章存档

友情链接