只需要知道三個**
日期**+月份**+年份**
就可以秒算任意年份任意日期的星期數
方法1、日期**指的是日期數,如3月18號,日期**為18。4月7號,日期**為7。
2、月份**(需要小小記憶)
五月 是 0
八月 是 1
二月 三月 十一月 是 2
六月 是 3
九月 十二月 是4
四月 七月 是5
一月 十月 是 6
如果遇到閏年 則二月**變為1,一月**變為5,其它不變。即,非閏年的月份**為622503 514624,閏年的月份**為512503 514624。
3、年份**
舉個例子 2023年的**,我們用尾數10除以4(忽略餘數)再加上10得到數字12,再用12除以7,得到的餘數5就是2023年的**。
也就是說,心算出2000到2099任意年份的**,只需將其後兩位數x除以4(忽略餘數),然後與x相加,並除以7就可以了,得到的餘數就是其年份**。10年的年份**是5,11年年份**為6。
4、秒算任意日期的星期數
如,我們算一下2023年4月25日
日期**25
月份**5
年份**5
日期**+月份**+年份**=25+5+5=35
35是7的倍數,所以2023年4月25日是星期日
再比如算一下2023年10月1日
日期**1
月份**6
年份**5
日期**+月份**+年份**=1+6+5=12
12除以7餘5,所以2023年10月1日是星期五
如果得到的**和是小於7的數,那麼此數直接是星期數
如果得到的**和是大於7的數,那麼將該數除以7得到的餘數為星期數。
方法二原理:蔡勒公式
1、w=[c/4]-2c+y+[y/4]+[26(m+1)/10]+d-1 (其中[ ]為取整符號)
2、其中,w是所求日期的星期數.如果求得的數大於7,可以減去7的倍數,直到餘數小於7為止.c是公元年份的前兩位數字,y是已知公元年份的後兩位數字;m是月數,d是日數.方括[ ]表示只擷取該數的整數部分。
3、還有乙個特別要注意的地方:所求的月份如果是1月或2月,則應視為前一年的13月或14月.所以公式中m 的取值範圍不是1-12,而是3-14.
uint8_t user_clock_date_to_week(int year,int month,int day)
//蔡勒公式
if(month==1||month==2)//判斷month是否為1或2
year--;
month+=12;
int c=year/100;
int y=year-c*100;
int week=(c/4)-2*c+(y+y/4)+(13*(month+1)/5)+day-1;
while(week<0)
week%=7;
switch(week)
case 1:debug_print("mondayn");break;
case 2:debug_print("tuesdayn");break;
case 3:debug_print("wednesdayn");break;
case 4:debug_print("thursdayn");break;
case 5:debug_print("fridayn");break;
case 6:debug_print("saturdayn");break;
case 0:debug_print("sundayn");break;
//對星期修正
week = (week == 0) ? 6 : week - 1;
return week;
閏年的判斷方法 給乙個日期判斷是星期幾
只需要知道三個 日期 月份 年份 就可以秒算任意年份任意日期的星期數 方法1 日期 指的是日期數,如3月18號,日期 為18。4月7號,日期 為7。2 月份 需要小小記憶 五月 是 0 八月 是 1 二月 三月 十一月 是 2 六月 是 3 九月 十二月 是4 四月 七月 是5 一月 十月 是 6 ...
C 根據日期判斷是否本週,根據日期,獲得星期幾
判斷選擇的日期是否是本週 public static bool isthisweek datetime somedate else 根據日期,獲得星期幾 年 月 日 星期幾,1代表星期一 7代表星期日 public static int getweekday int y,int m,int d 計算...
點選檢視乙個星期的日期
上週 span style display inline block float left id weekday div getnextweekrange class weekonchange 下週 span js var currenttime newdate function 本週 functi...