满意答案
function xingqi=day1234567(year,month,day)
%year:年,month:月,day:日,本函数可以算出这个日期是星期几
% 例如: day1234567(2013,10,22)
% 以2000年,1月1日为星期六为基点,前后都可以计算
%平年时1到12月份的前一个月的累计天数,[0 31 28 31 30 31 30 31 31 30 31 30]*triu(ones(12))
yue=[0,31, ...% 一月,二月的前一个月的累计天数
[59,90,120,151,181,212,243,273,304,334]+ ...% 本行会根据本年的闰年或非闰年+1或+0;加号必须在此行,不能在下一行,否则错
(mod(year,4)==0 & mod(year,100)~=0 | mod(year,400)==0)]; % 0是平年,1 是闰年 ;因为计算优先级的原因,注意加括号
run=year-(year>2000)-2000;% 意义见下面的***
xingqi=mod( ...
year-2000 ... %差的年数乘以365天:365*(x-2000) mod 7 = (x-2000) mod 7
... %***大于2000年时,闰年数从2000年算到前一年;小于等于2000年时,闰年数绝对值从本年算到2000年,但不包括2000年这个闰年***
+ fix(run/4)-fix(run/100)+fix(run/400)+(year>2000) ... %闰年数的代数值,包括正负号
+ yue(month) ... %从年初到前一个月的整月天数
+ day ... %本月的天数
-1+6-1,7)+1;% 减1号,加星期6,向前错位1,让星期1模7后变为0,...星期7模7后变为6,之后再向后错位1,变为星期1到星期7
end
00分享举报