其實是要精確到周即可, 即給定目前時間, 知道是本學期的開學第幾周. 問題的關鍵好像是沒找到規律, 我現在用的是如下代碼(php), 準確度不夠好:
function teachweek ($date){ $timestamp=strtotime($date); if (date('m', $timestamp)>=9){ return date('W', $timestamp)-35; }elseif(date('m', $timestamp)<=2){ return date('W', $timestamp)+18; }else{ return date('W', $timestamp)-7; }}
回複內容:
其實是要精確到周即可, 即給定目前時間, 知道是本學期的開學第幾周. 問題的關鍵好像是沒找到規律, 我現在用的是如下代碼(php), 準確度不夠好:
function teachweek ($date){ $timestamp=strtotime($date); if (date('m', $timestamp)>=9){ return date('W', $timestamp)-35; }elseif(date('m', $timestamp)<=2){ return date('W', $timestamp)+18; }else{ return date('W', $timestamp)-7; }}
不準確的問題應該出在35、18這幾個數字上,另外,如果9月1日是星期六或者星期日的話,也不能算作第一周,所以,可以先判斷當年9月1日是在第幾周
$thisyear=date('Y',strtotime($date));$ondate=date('W',strtotime("1 September $thisyear"));
這樣,第四行就能替換成
return date('W', $timestamp)-$ondate+1;
是否+1需要通過對9月1日是否為周六/日判斷確定,這兒具體就不寫了;
如果日期是年初寒假之前,還需要跨年計算去年9月1日到12月31日的周數
$lastyear=date('Y',strtotime($date))-1;$lastyearweeks=date('W',strtotime("31 December $lastyear"))-date('W',strtotime("1 September $lastyear"))+1;
同樣的,是否+1需要通過對9月1日是否為周六/日判斷確定,這樣,第六行就能替換成
return (date('W', $timestamp)%53)+$lastyearweeks;
同理,確定第二學期開學日期的話,類似思路修改最後一個retrun裡的7,即可判斷日期是第二學期的第幾周
你們都被表面需求迷惑了,如果是問當前日期是開學日期的第幾個月,樓主和一樓的邏輯雖然不完全對但是修改一下還是OK的,可是對於第幾周就沒必要了,因為問題的關鍵在於7天是一周。我的偽碼如下
$startDate = 開學日期; //如2016-02-16$startDay = 開學這天是星期幾; //如3表示周3$limitDay = 今天是自1970年以來第幾天 - 開學日期是自1970年以來的第幾天; //比如55天周日當每周的第一天了,此題中考慮這個問題沒什麼意義)$weekNumber = ceil(($limitDay + $startDay) / 7); //因為開學第一周可能不是整周,所以補上失去的天數
$weekNumber就是你要的了
感謝大家的貢獻. 我覺得可以從下面的表格作出分析(#注):
年份 |
(春)上課日期 |
(春)教學周數 |
暑假開始 |
(秋)上課日期 |
(秋)教學周數 |
寒假開始 |
除夕:周幾 |
2010 |
3/1 |
21 |
7/25 |
8/30 |
20 |
1/15 |
2/2:3 |
2011 |
2/21 |
18 |
6/25 |
8/29 |
20 |
1/15 |
1/22:7 |
2012 |
2/13 |
18 |
6/17 |
9/3 |
21 |
1/26 |
2/9:6 |
2013 |
2/25 |
18 |
6/29 |
9/2 |
20 |
1/18 |
1/30:4 |
2014 |
2/17 |
18 |
6/21 |
9/1 |
22 |
1/31 |
2/18:3 |
2015 |
3/2 |
18 |
7/4 |
8/31 |
21 |
1/23 |
2/8:1 |
2016 |
2/22 |
18 |
6/25 |
8/29 |
通過分析發現, 也許我們可以先分析什麼時候過年, 然後暑假由過年前後各兩周決定, 這裡還需要些細化, 例如還和過年是星期幾有關.
秋季開學由離9/1號最近的周一決定?
春季由開學日期(由過年決定)?
(#注: 統計結果可能不是非常正確, 大家可以複查.)
這東西還需要用演算法做,或者演算法能做出來嗎?直接把校曆的時間錄到資料庫裡就完了麼
校曆出一次管一年,也就是說1年錄一次就可以,說白了,根本就沒有規律,這個是教務處說了算的
真以為全國高校都9月1號開學 過年都讓過元宵節啊 我在某985高校從來就沒有在家過完元宵過