从下拉框中选择年份和该年的周数,计算出该周的开始日期和结束日期

本文介绍了一个在线日期转换工具,能够根据用户输入的年份和周数,精确计算出该周的第一天和最后一天的具体日期。通过内部循环和函数调用,实现对不同年份和周数的灵活转换,帮助用户快速获取所需日期信息。

 

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <html xmlns="http://www.w3.org/1999/xhtml">  
<head>    
<title>js.Date.convertWeekNumberToFirstDate.html </title>    
<meta name="generator" content="editplus" />    
<meta name="author" content="yixianggao@126.com" />    
<meta name="keywords" content="" />    
<meta name="description" content="" />  
</head>     
<body>    
<select id="sltYear"> </select>    
<select id="sltWeek"> </select>    
<span id="spnDate"></span>—<span id="lpnDate"></span>
<script type="text/javascript">    
<!-- 
$ = document.getElementById; 
var oYear = $("sltYear");  //从循环中获取年份
var oWeek = $("sltWeek");  //从循环中获取周数
var oDate = $("spnDate"); //周数对应的周一的日期
var lDate = $("lpnDate"); //周数对应的周五的日期
/*
*先获取当前年份,然后当年分小于2020年时,循环获取
*从2011年到2020年的一个数组
*/
for (var i=(new Date()).getFullYear(); 2000<= i <=2020; i++){   
oYear.add(new Option(i+"年", i)); 

/*
*循环获取从第一周到第52周的一个数组
*/
for (var i=1; i <=52; i++)  {   
oWeek.add(new Option(i+"周", i)); 

/*  
* sYear: string, 年份;  
* sWeek: string, 周数;  
* startFromFirstMonday: boolean, 是否从每年第一天开始计算周数,  
* true: 从每年第一天开始计算周数;false: 从每年第一个周一开始计算周数。  
*/ 
function convertWeekNumberToFirstDate(sYear, sWeek, startFromFirstMonday)  {   
if (startFromFirstMonday == undefined)
 startFromFirstMonday = true;     
var weekIndex = 1;     
var year = parseInt(sYear);   
var week = parseInt(sWeek);     
var i = 1;   
var dFirstDate = new Date(year, 0, i);     
if (!startFromFirstMonday){    
   if (weekIndex  < week){     
      weekIndex++;    
   }else     
   return dFirstDate;   
   }     
   if (dFirstDate.getDay() != 1){    
   i += 7 - dFirstDate.getDay() + 1;    
   dFirstDate.setFullYear(year, 0, i);   
   }     
   if (weekIndex  < week){    
   i += 7*(week-weekIndex);    
   dFirstDate.setFullYear(year, 0, i);   
   }   
    return dFirstDate; 
}   
function displayDate()  {   
var dFirstDate = convertWeekNumberToFirstDate(oYear.value, oWeek.value);   
oDate.innerHTML = dFirstDate.getFullYear()+"-"+(dFirstDate.getMonth()+1)+"-"+dFirstDate.getDate(); 
lDate.innerHTML = dFirstDate.getFullYear()+"-"+(dFirstDate.getMonth()+1)+"-"+(dFirstDate.getDate()+4); 
}   
displayDate(); 
oYear.onchange = oWeek.onchange = displayDate;     
//-->   
</script>   
</body>  
</html>

运行结果如图:

当选择年份和周数的时候,后面的日期段会随着对应变化

要实现在网页中动态向 `div` 容器内添加一个包含**当前年份****下一年份**选项的 `<select>` 元素,可以通过 JavaScript 动态创建元素并插入到指定的 `div` 中。以下是完整的实现方式: ### 创建 HTML 结构 首先,在 HTML 页面中定义一个 `div` 容器,用于承载动态生成的下拉框。 ```html <div id="yearSelectContainer"></div> ``` ### 使用 JavaScript 动态生成下拉框 接下来使用 JavaScript 获取当前年份,并构建包含当前年份下一年份的 `<select>` 元素。 ```javascript // 获取当前年份 const currentYear = new Date().getFullYear(); // 下一年份 const nextYear = currentYear + 1; // 创建 select 元素 const selectElement = document.createElement("select"); selectElement.id = "yearSelector"; // 创建 option 元素并添加到 select 中 const currentYearOption = document.createElement("option"); currentYearOption.value = currentYear; currentYearOption.textContent = currentYear; selectElement.appendChild(currentYearOption); const nextYearOption = document.createElement("option"); nextYearOption.value = nextYear; nextYearOption.textContent = nextYear; selectElement.appendChild(nextYearOption); // 将 select 元素插入到 div 容器中 document.getElementById("yearSelectContainer").appendChild(selectElement); ``` ### 样式优化(可选) 为了增强用户体验,可以为下拉框添加一些基础样式。 ```css #yearSelectContainer select { padding: 8px; font-size: 16px; border-radius: 4px; border: 1px solid #ccc; } ``` ### 扩展功能:监听选择变化事件 如果需要在用户选择年份后执行某些操作,例如更新页面内容或发送请求,可以添加事件监听器。 ```javascript selectElement.addEventListener("change", function () { const selectedYear = this.value; alert(`您选择年份:${selectedYear}`); }); ``` ### 示例完整代码 以下是一个完整的 HTML 示例,整合了上述所有部分: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <title>动态年份下拉框</title> <style> #yearSelectContainer select { padding: 8px; font-size: 16px; border-radius: 4px; border: 1px solid #ccc; } </style> </head> <body> <div id="yearSelectContainer"></div> <script> // 获取当前年份 const currentYear = new Date().getFullYear(); const nextYear = currentYear + 1; // 创建 select 元素 const selectElement = document.createElement("select"); selectElement.id = "yearSelector"; // 添加当前年份选项 const currentYearOption = document.createElement("option"); currentYearOption.value = currentYear; currentYearOption.textContent = currentYear; selectElement.appendChild(currentYearOption); // 添加下一年份选项 const nextYearOption = document.createElement("option"); nextYearOption.value = nextYear; nextYearOption.textContent = nextYear; selectElement.appendChild(nextYearOption); // 插入到容器中 document.getElementById("yearSelectContainer").appendChild(selectElement); // 监听 change 事件 selectElement.addEventListener("change", function () { const selectedYear = this.value; alert(`您选择年份:${selectedYear}`); }); </script> </body> </html> ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值