DateDiff汇总了吗?

时间:2014-02-19 15:36:59

标签: vba ms-access

我在旧代码中找到了一个位置,原始程序员试图计算一名员工是否已被聘用了一定年限。计算使用了雇用日期和今天之间的天数之差除以364.这对我来说没有意义所以我将其改为多年的差异。这也似乎给出了错误的答案。 DateDiff是否一直到最近的一年?在即时窗口中运行此公式得到15作为答案。我希望它能给出14。

?datediff("yyyy",#3/1/1999#,#2/19/2014#)  

使用它会更好吗。

?datediff("m",#3/1/1999#,#2/19/2014#)/12

3 个答案:

答案 0 :(得分:5)

DateDiff多年来只考虑您提供的日期部分。并且它不会返回您可能想要的“多少年”......

例如,就DateDiff("yyyy"而言,2013年的最后一天到2014年的第一天将是一年。

? DateDiff("yyyy", #2013-12-31#, #2014-1-1#)
 1 

答案 1 :(得分:1)

DateDiff如果年份差异为x年和y个月,则四舍五入到下一年。

例如:

如果一个人的年龄为18岁零一个月,则datediff(yy,DDOB,GetDate())的结果将为'19'。

如果您不想四舍五入,可以

  • 将日期强制转换为两个日期之间的天数差异 INTEGER
  • 用365.25划分差异
  • 使用FLOOR忽略小数部分(不要舍入为小数点 下一个号码):

    FLOOR((CAST (GetDate() AS INTEGER) - CASR(YourDate AS INTEGER)) / 356.25)

答案 2 :(得分:0)

您可以将IIf,DateDiff和DateAdd组合在一起,如下所示:

=IIf(DateDiff("m";DateAdd("yyyy";DateDiff("yyyy";[DDOB];Date());[DDOB]);Date())<0;
DateDiff("yyyy";[DDOB];Date())-1;
DateDiff("yyyy";[DDOB];Date()))

因此,首先您要计算DDOB加DateDiff年和Date()之间的月份,如果整数形式DateDiff“ m”为负,则IIf将减少年份的值一个。