[JS]判定某一天在该年份中是第几周的算法源代码
判断某一天是该年中的第多少周,需要知道该年的第一天是星期几。比如第一年第一天是星期一,那么直接获取那一天是该年中的第多少天,取它除以7的上限;如果不是星期一,则需要进行如下计算
判断某一天是该年中的第多少周,需要知道该年的第一天是星期几。比如第一年第一天是星期一,那么直接获取那一天是该年中的第多少天,取它除以7的上限;如果不是星期一,则需要进行如下计算:
一周是7天,减去那一天星期几,则该礼拜还有 7 – n天结束,再加一天则是下一礼拜。
示例代码:
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
- <html>
- <head>
- <title>判定某一天在该年份中是第几周</title>
- </head>
- <body>
- <script type="text/javascript">
- /**
- * 判断年份是否为润年
- *
- * @param {Number} year
- */
- function isLeapYear(year) {
- return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
- }
- /**
- * 获取某一年份的某一月份的天数
- *
- * @param {Number} year
- * @param {Number} month
- */
- function getMonthDays(year, month) {
- return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] || (isLeapYear(year) ? 29 : 28);
- }
- function clickHandler() {
- var y = $('year').value,
- m = $('month').value,
- d = $('day').value;
- var now = new Date(y, m - 1, d),
- year = now.getFullYear(),
- month = now.getMonth(),
- days = now.getDate();
- //那一天是那一年中的第多少天
- for (var i = 0; i < month; i++) {
- days += getMonthDays(year, i);
- }
- //那一年第一天是星期几
- var yearFirstDay = new Date(year, 0, 1).getDay() || 7;
- var week = null;
- if (yearFirstDay == 1) {
- week = Math.ceil(days/yearFirstDay);
- } else {
- days -= (7 - yearFirstDay + 1);
- week = Math.ceil(days/7) + 1;
- days = Math.max(days, 1);
- }
- alert(y + "年" + m + "月" + d + "日是" + year + "年的\n\n第" + days + "天\t第" + week + "周");
- }
- </script>
- 选择日期:
- <select id="year"></select><label for="year">年</label>
- <select id="month"></select><label for="month">月</label>
- <select id="day"></select><label for="day">日</label>
- <button style='margin-left:30px;'>开始计算</button>
- <script type="text/javascript">
- function $(id) {
- return typeof id === 'string' ? document.getElementById(id) : id;
- }
- function addOptions(id, start, end) {
- var opt = null,
- frag = document.createDocumentFragment();
- for (var i = start; i <= end ; i++) {
- opt = document.createElement("option");
- opt.value = i;
- opt.innerHTML = i;
- frag.appendChild(opt);
- }
- $(id).appendChild(frag);
- }
- function setDays(y, m) {
- addOptions('day', 1, getMonthDays(y, m - 1));
- }
- function changeDays() {
- var val = $('day').value;
- $('day').options.length = 0;
- var y = $('year').value,
- m = $('month').value;
- setDays(y, m);
- if (val) {
- var maxDay = getMonthDays(y, m - 1);
- $('day').value = (val > maxDay) ? maxDay : val;
- }
- }
- addOptions('year', 1970, 2050);
- addOptions('month', 1, 12);
- changeDays();
- //默认设置为本地时间
- !(function() {
- var now = new Date();
- $('year').value = now.getFullYear();
- $('month').value = now.getMonth() + 1;
- $('day').value = now.getDate();
- })();
- $('year').onchange = changeDays;
- $('month').onchange = changeDays;
- document.getElementsByTagName("button")[0].onclick = clickHandler;
- </script>
- </body>
- </html>
热门文章推荐
- [JS]window.location获取url各项参数详解
- [JS]jQuery,javascript获得网页的高度和宽度
- [JS]视频弹窗视频弹出层videoLightBox(含三种播放器的用法)
- [JS]JS提交中文encodeURI两次转码
- [JS]js版方面encodeURI转码和decodeURI解码的用法实例
- [JS]js取当前机子的时间戳实例
- [JS]AES加密(基于crypto-js)PHP后端解密
- [JS]data:image/png;base64写法的用途及说明
请稍候...