如何判断任意日期的星期

继如何自动计算每月天数问题之后衍生出来一个新问题,如何判断任意日期是星期几,毕竟不是每个月的一号就是星期一。本文简单介绍一下如何计算出任意一个日期是星期几。

第一步:制作报表

如图所示:

A1单元格根据参数年份和参数月份判断该月的天数;

A2单元格根据参数年份判断是否是润年,如果是则对二月份进行判断计算出该月总天数;

B1单元格为年份和月份拼成的日期类型,

B2单元格根据B1单元格拼出的该月第一天用relDate函数通过A2单元格获取的该月总共的天数去计算该月最后一天;

预览效果:

第二步:用基姆拉尔森计算公式计算星期;

基姆拉尔森计算公式算法如下:

W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7

在公式中d表示日期中的日数,m表示月份数,y表示年数。

注意:在公式中有个与其他公式不同的地方:

把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。

如图所示:

将基姆拉尔森计算公式写在C2单元格:

if(month(B2)==1,round((day(B2)+(2*(month(B2)+12))+(3*((month(B2)+12)+1)/5)+(year(B2)-1)+((year(B2)-1)/4)-((year(B2)-1)/100)+((year(B2)-1)/400))%7,0),month(B2)==2,(round((day(B2)+(2*(month(B2)+12))+(3*((month(B2)+12)+1)/5)+(year(B2)-1)+((year(B2)-1)/4)-((year(B2)-1)/100)+((year(B2)-1)/400))%7,0))+1.0,round((day(B2)+(2*month(B2))+(3*(month(B2)+1)/5)+year(B2)+(year(B2)/4)-(year(B2)/100)+(year(B2)/400))%7,0))

由于返回值是从1至7的数字,所以在显示值表达式里写:

if(map(list(1,2,3,4,5,6,7),list(“星期一“,”星期二“,”星期三“,”星期四“,”星期五“,”星期六“,”星期天“)))即可实现如下图所示效果: