Excel 2013中的日期逻辑

Excel 2013中的日期逻辑,excel,excel-formula,Excel,Excel Formula,以下公式适用于大多数日期组合: =IF(INT(B2)=INT(NOW()),"Today",IF(DAYS(NOW(),B2)>365,IF(DAYS(NOW(),B2)/365.25>1,YEAR(NOW())-YEAR(B2),0)&" years, ","")&IF(IF(MONTH(NOW())-MONTH(B2)<0,MONTH(NOW())-(MONTH(B2)-11),IF(DAYS(NOW(),B2)<28,0,MONTH(NOW())-

以下公式适用于大多数日期组合:

=IF(INT(B2)=INT(NOW()),"Today",IF(DAYS(NOW(),B2)>365,IF(DAYS(NOW(),B2)/365.25>1,YEAR(NOW())-YEAR(B2),0)&" years, ","")&IF(IF(MONTH(NOW())-MONTH(B2)<0,MONTH(NOW())-(MONTH(B2)-11),IF(DAYS(NOW(),B2)<28,0,MONTH(NOW())-MONTH(B2)))=0,"",IF(MONTH(NOW())-MONTH(B2)<0,MONTH(NOW())-(MONTH(B2)-11),IF(DAYS(NOW(),B2)<28,0,MONTH(NOW())-MONTH(B2)))&" months and ")&IF(DAY(NOW())-DAY(B2)<0,VLOOKUP(MONTH(B2),{1,31;2,28;3,31;4,30;5,31;6,30;7,31;8,31;9,30;10,31;11,30;12,31},2)-DAY(B2)+DAY(NOW()),DAY(NOW())-DAY(B2))&" days")

=IF(INT(B2)=INT(NOW()),“Today”,IF(DAYS(NOW(),B2)>365,IF(DAYS(NOW(),B2)/365.25>1,YEAR(NOW())-YEAR(B2),0)和“years,”,“)&IF(IF(MONTH(NOW())-MONTH(B2)您的函数似乎使用的是朱利安年长度,而不是更复杂的格里高利年长度。这就是函数的健壮性受到质疑的原因之一

幸运的是,Excel有一个内置函数
DATEDIF
,您可以使用它。但是,出于某种原因,它是一个隐藏函数!(我完全不知道为什么)

如果A1和A2包含两个日期,则使用

=DATEDIF(A1,A2,“y”)和“年”,DATEDIF(A1,A2,“ym”)和“月”,DATEDIF(A1,A2,“md”)和“天”


A1必须早于A2。

您的函数似乎使用的是朱利安年长度,而不是更复杂的格里高利年长度。这就是为什么您的函数的健壮性会受到质疑的原因之一

幸运的是,Excel有一个内置函数
DATEDIF
,您可以使用它。但是,出于某种原因,它是一个隐藏函数!(我完全不知道为什么)

如果A1和A2包含两个日期,则使用

=DATEDIF(A1,A2,“y”)和“年”,DATEDIF(A1,A2,“ym”)和“月”,DATEDIF(A1,A2,“md”)和“天”

A1必须早于A2。

因为DATEDIF(date1,date2,“md”)在

DAY(dates2)<DAY(date1)
月份

=DATEDIF(A2,B2,"m")
日子

以下是一些测试用例:-

自DATEDIF(date1,date2,“md”)以来,当

DAY(dates2)<DAY(date1)
月份

=DATEDIF(A2,B2,"m")
日子

以下是一些测试用例:-


对于其他想做同样事情的人,我的工作职责如下:

=IF(DAYS(NOW(),B2)>0,CONCATENATE(IF(DATEDIF(B2,NOW(),"y")=0,"",DATEDIF(B2,NOW(),"y")),IF(DATEDIF(B2,NOW(),"y")=0,"", " year"),IF(DATEDIF(B2,NOW(),"y")>1,"s",""),IF(AND(DATEDIF(B2,NOW(),"y")>0,DATEDIF(B2,NOW(),"ym")>0),IF(IF(AND(DATEDIF(B2,NOW(),"md")>0,OR(DATEDIF(B2,NOW(),"y")>0,DATEDIF(B2,NOW(),"ym")>0))," and ","")=""," and ",", "),""),IF(DATEDIF(B2,NOW(),"ym")=0,"",DATEDIF(B2,NOW(),"ym")),IF(DATEDIF(B2,NOW(),"ym")=0,"", " month"),IF(DATEDIF(B2,NOW(),"ym")>1,"s",""),IF(AND(DATEDIF(B2,NOW(),"md")>0,OR(DATEDIF(B2,NOW(),"y")>0,DATEDIF(B2,NOW(),"ym")>0))," and ",""),IF(DATEDIF(B2,NOW(),"md")=0,"",DATEDIF(B2,NOW(),"md")),IF(DATEDIF(B2,NOW(),"md")=0,"", " day"),IF(DATEDIF(B2,NOW(),"md")>1,"s","")),"Less than a day")

结果是“1年5个月15天”。

如果有人想这样做,我的工作职能如下:

=IF(DAYS(NOW(),B2)>0,CONCATENATE(IF(DATEDIF(B2,NOW(),"y")=0,"",DATEDIF(B2,NOW(),"y")),IF(DATEDIF(B2,NOW(),"y")=0,"", " year"),IF(DATEDIF(B2,NOW(),"y")>1,"s",""),IF(AND(DATEDIF(B2,NOW(),"y")>0,DATEDIF(B2,NOW(),"ym")>0),IF(IF(AND(DATEDIF(B2,NOW(),"md")>0,OR(DATEDIF(B2,NOW(),"y")>0,DATEDIF(B2,NOW(),"ym")>0))," and ","")=""," and ",", "),""),IF(DATEDIF(B2,NOW(),"ym")=0,"",DATEDIF(B2,NOW(),"ym")),IF(DATEDIF(B2,NOW(),"ym")=0,"", " month"),IF(DATEDIF(B2,NOW(),"ym")>1,"s",""),IF(AND(DATEDIF(B2,NOW(),"md")>0,OR(DATEDIF(B2,NOW(),"y")>0,DATEDIF(B2,NOW(),"ym")>0))," and ",""),IF(DATEDIF(B2,NOW(),"md")=0,"",DATEDIF(B2,NOW(),"md")),IF(DATEDIF(B2,NOW(),"md")=0,"", " day"),IF(DATEDIF(B2,NOW(),"md")>1,"s","")),"Less than a day")

结果是“1年5个月15天”.

这个公式试图做什么?它是一个日期比较。如果B2是2014年7月15日,它将返回2年6个月24天。如果B2是2015年5月7日,它将返回8个月1天。如果B2是2016年2月3日,它将返回5天。这个公式试图做什么?它是一个日期比较。如果B2是2014年7月15日,它将返回2年6个月N和24天。如果B2是2015年5月7日,它将返回8个月零1天。如果B2是2016年2月3日,它将返回5天。最后一部分似乎为我做了一些奇怪的事情,例如,如果你尝试A1=31/1/15和A2=1/3/16,你得到了-1吗?我看到了使用DATEDIF的其他响应,但假设它在2013年不可用,因为它不在函数列表中:s谢谢你u@BathshebaIt是-但由于某种原因被隐藏了。@TomSharpe:我下一次来办公室时会检查那个角落的箱子。谢谢!老实说,上个月(二月)的时候很难知道答案应该是什么“没有足够的天数”。Hm 14年11月30日和16年1月1日的结果更奇怪。最后一部分似乎为我做了一些奇怪的事情,例如,如果你尝试A1=31/1/15和A2=1/3/16,你会得到-1吗?我看到了其他使用DATEDIF的回复,但假设它在2013年不可用,因为它不在功能列表中:s Thank you@BathshebaIt是-但对一些人来说是隐藏的原因。@TomSharpe:我下一次到办公室时会检查那个角落的箱子。谢谢!老实说,当上个月(2月)“没有足够的天数”时,很难知道答案应该是什么。嗯,更奇怪的是,14年11月30日和16年1月1日的确如此,请注意,我声明“A1必须早于A2”在我的回答中。你的方法看起来很有希望。还有一个。(顺便说一句,如果你不接受我的答案,接受你自己的答案,你不会有任何不快的感觉。看来你的解决方案对未来的用户更有用,这就是这个网站的全部内容)。谢谢你的积极评论(我没有发表最初的帖子,但被吸引到其中:-)的确如此,请注意,我在回答中声明“A1必须早于A2”。你的方法看起来很有希望。另外还有一个。(顺便说一句,如果你不接受我的答案并接受你自己的答案,你一点也不难过。看来你的解决方案对未来用户更有用,这就是本网站的全部内容)。谢谢你的积极评论(我没有发表最初的帖子,但被它吸引了:-)