如何計算開學第幾周, 要求每年通用

來源:互聯網
上載者:User
其實是要精確到周即可, 即給定目前時間, 知道是本學期的開學第幾周. 問題的關鍵好像是沒找到規律, 我現在用的是如下代碼(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
  1. 通過分析發現, 也許我們可以先分析什麼時候過年, 然後暑假由過年前後各兩周決定, 這裡還需要些細化, 例如還和過年是星期幾有關.

  2. 秋季開學由離9/1號最近的周一決定?

  3. 春季由開學日期(由過年決定)?

(#注: 統計結果可能不是非常正確, 大家可以複查.)

這東西還需要用演算法做,或者演算法能做出來嗎?直接把校曆的時間錄到資料庫裡就完了麼
校曆出一次管一年,也就是說1年錄一次就可以,說白了,根本就沒有規律,這個是教務處說了算的
真以為全國高校都9月1號開學 過年都讓過元宵節啊 我在某985高校從來就沒有在家過完元宵過

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.