·您当前的位置:首页 > 技术教程 > JavaScript >

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

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

判断某一天是该年中的第多少周,需要知道该年的第一天是星期几。比如第一年第一天是星期一,那么直接获取那一天是该年中的第多少天,取它除以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.  * @param {Number} year 
  21.  * @param {Number} month 
  22.  */ 
  23. function getMonthDays(year, month) { 
  24.     return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] || (isLeapYear(year) ? 29 : 28); 
  25. function clickHandler() { 
  26.     var y = $('year').value, 
  27.         m = $('month').value, 
  28.         d = $('day').value; 
  29.  
  30.     var now = new Date(y, m - 1, d), 
  31.         year = now.getFullYear(), 
  32.         month = now.getMonth(), 
  33.         days = now.getDate(); 
  34.  
  35.     //那一天是那一年中的第多少天 
  36.     for (var i = 0; i < month; i++) { 
  37.         days += getMonthDays(year, i); 
  38.     } 
  39.     //那一年第一天是星期几 
  40.     var yearFirstDay = new Date(year, 0, 1).getDay() || 7; 
  41.     var week = null
  42.     if (yearFirstDay == 1) { 
  43.         week = Math.ceil(days/yearFirstDay); 
  44.     } else { 
  45.         days -= (7 - yearFirstDay + 1); 
  46.         week = Math.ceil(days/7) + 1; 
  47.         days = Math.max(days, 1); 
  48.     } 
  49.     alert(y + "年" + m + "月" + d + "日是" + year + "年的\n\n第" + days + "天\t第" + week + "周"); 
  50. </script> 
  51. 选择日期: 
  52. <select id="year"></select><label for="year"></label> 
  53. <select id="month"></select><label for="month"></label> 
  54. <select id="day"></select><label for="day"></label> 
  55.  
  56. <button style='margin-left:30px;'>开始计算</button> 
  57.  
  58. <script type="text/javascript"> 
  59. function $(id) { 
  60.     return typeof id === 'string' ? document.getElementById(id) : id; 
  61. function addOptions(id, start, end) { 
  62.     var opt = null
  63.         frag = document.createDocumentFragment(); 
  64.          
  65.     for (var i = start; i <= end ; i++) { 
  66.         opt = document.createElement("option"); 
  67.         opt.value = i
  68.         opt.innerHTML = i; 
  69.         frag.appendChild(opt); 
  70.     } 
  71.      
  72.     $(id).appendChild(frag); 
  73. function setDays(y, m) { 
  74.     addOptions('day', 1, getMonthDays(y, m - 1)); 
  75. function changeDays() { 
  76.     var val = $('day').value; 
  77.      
  78.     $('day').options.length = 0
  79.  
  80.     var y = $('year').value, 
  81.         m = $('month').value; 
  82.  
  83.     setDays(y, m); 
  84.  
  85.     if (val) { 
  86.         var maxDay = getMonthDays(y, m - 1); 
  87.  
  88.         $('day').value = (val > maxDay) ? maxDay : val; 
  89.     } 
  90. addOptions('year', 1970, 2050); 
  91. addOptions('month', 1, 12); 
  92. changeDays(); 
  93.  
  94. //默认设置为本地时间 
  95. !(function() { 
  96.     var now = new Date(); 
  97.     $('year').value = now.getFullYear(); 
  98.     $('month').value = now.getMonth() + 1; 
  99.     $('day').value = now.getDate(); 
  100. })(); 
  101. $('year').onchange = changeDays
  102. $('month').onchange = changeDays
  103. document.getElementsByTagName("button")[0].onclick = clickHandler
  104. </script> 
  105.  </body> 
  106. </html> 

 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器