宜昌本地软件开发与弱电工程服务商
项目咨询 · 快速响应

[JS]判定某一天在该年份中是第几周的算法源代码

2016-10-13 00:16:48 点击量:70 标签: 收藏本文

判断某一天是该年中的第多少周,需要知道该年的第一天是星期几。比如第一年第一天是星期一,那么直接获取那一天是该年中的第多少天,取它除以7的上限;如果不是星期一,则需要进行如下计算:

一周是7天,减去那一天星期几,则该礼拜还有 7 – n天结束,再加一天则是下一礼拜。

示例代码:

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
  2. <html> 
  3.  <head> 
  4.   <title>判定某一天在该年份中是第几周</title> 
  5.  </head> 
  6.  
  7.  <body> 
  8.    
  9. <script type="text/javascript"> 
  10. /** 
  11.  * 判断年份是否为润年 
  12.  *  
  13.  * @param {Number} year 
  14.  */ 
  15. function isLeapYear(year) { 
  16.     return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0); 
  17. } 
  18. /** 
  19.  * 获取某一年份的某一月份的天数 
  20.  *  
  21.  * @param {Number} year 
  22.  * @param {Number} month 
  23.  */ 
  24. function getMonthDays(year, month) { 
  25.     return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] || (isLeapYear(year) ? 29 : 28); 
  26. } 
  27. function clickHandler() { 
  28.     var y = $('year').value, 
  29.         m = $('month').value, 
  30.         d = $('day').value; 
  31.  
  32.     var now = new Date(y, m - 1, d), 
  33.         year = now.getFullYear(), 
  34.         month = now.getMonth(), 
  35.         days = now.getDate(); 
  36.  
  37.     //那一天是那一年中的第多少天 
  38.     for (var i = 0; i < month; i++) { 
  39.         days += getMonthDays(year, i); 
  40.     } 
  41.     //那一年第一天是星期几 
  42.     var yearFirstDay = new Date(year, 0, 1).getDay() || 7; 
  43.     var week = null; 
  44.     if (yearFirstDay == 1) { 
  45.         week = Math.ceil(days/yearFirstDay); 
  46.     } else { 
  47.         days -= (7 - yearFirstDay + 1); 
  48.         week = Math.ceil(days/7) + 1; 
  49.         days = Math.max(days, 1); 
  50.     } 
  51.     alert(y + "年" + m + "月" + d + "日是" + year + "年的\n\n第" + days + "天\t第" + week + "周"); 
  52. } 
  53. </script> 
  54. 选择日期: 
  55. <select id="year"></select><label for="year">年</label> 
  56. <select id="month"></select><label for="month">月</label> 
  57. <select id="day"></select><label for="day">日</label> 
  58.  
  59. <button style='margin-left:30px;'>开始计算</button> 
  60.  
  61. <script type="text/javascript"> 
  62. function $(id) { 
  63.     return typeof id === 'string' ? document.getElementById(id) : id; 
  64. } 
  65. function addOptions(id, start, end) { 
  66.     var opt = null, 
  67.         frag = document.createDocumentFragment(); 
  68.          
  69.     for (var i = start; i <= end ; i++) { 
  70.         opt = document.createElement("option"); 
  71.         opt.value = i; 
  72.         opt.innerHTML = i; 
  73.         frag.appendChild(opt); 
  74.     } 
  75.      
  76.     $(id).appendChild(frag); 
  77. } 
  78. function setDays(y, m) { 
  79.     addOptions('day', 1, getMonthDays(y, m - 1)); 
  80. } 
  81. function changeDays() { 
  82.     var val = $('day').value; 
  83.      
  84.     $('day').options.length = 0; 
  85.  
  86.     var y = $('year').value, 
  87.         m = $('month').value; 
  88.  
  89.     setDays(y, m); 
  90.  
  91.     if (val) { 
  92.         var maxDay = getMonthDays(y, m - 1); 
  93.  
  94.         $('day').value = (val > maxDay) ? maxDay : val; 
  95.     } 
  96. } 
  97. addOptions('year', 1970, 2050); 
  98. addOptions('month', 1, 12); 
  99. changeDays(); 
  100.  
  101. //默认设置为本地时间 
  102. !(function() { 
  103.     var now = new Date(); 
  104.     $('year').value = now.getFullYear(); 
  105.     $('month').value = now.getMonth() + 1; 
  106.     $('day').value = now.getDate(); 
  107. })(); 
  108. $('year').onchange = changeDays; 
  109. $('month').onchange = changeDays; 
  110. document.getElementsByTagName("button")[0].onclick = clickHandler; 
  111. </script> 
  112.  </body> 
  113. </html>