网络编程
位置:首页>> 网络编程>> JavaScript>> Javascript实现通过选择周数显示开始日和结束日的实现代码

Javascript实现通过选择周数显示开始日和结束日的实现代码

作者:山中小溪  发布时间:2023-08-23 13:44:52 

标签:js,周数,开始日,结束日

 最近在一个项目中遇到一个查询页面,其中一个查询条件是根据选择的年份、月以及周数显示选择的该周从几号到几号,这样一个需求。在网上搜索了一下,有类似的但是没有完全一样的,只好自己动手。思路是首先取得所选择的该年月1号这一天是星期几,然后算出这一周中周一的日期。

以此为基点,第1周的结束日即为这一天加6,第2周的开始日为这一天加7,结束日为这一天加13,以此类推,直到推算出第5周的开始日和结束日。

具体代码如下:


//该方法有两个参数,date是给定的日期型参数,days是需要在该日期进行加减的天数。
//例如,add(2010-10-01,-3)返回从2010-10-01这一天往前退3天的日期即2010-09-28
function addDate(date,days){
var d=new Date(date);
d.setDate(d.getDate()+days);
var m=d.getMonth()+1;
var tmpDate = d.getFullYear()+ "/" + m + "/" + d.getDate();
var resultDate = new Date(tmpDate);
return resultDate;
}
//对选择的年月转换为YYYY-MM-dd的格式
function changeDateFormat(DateIn){
var year = 0;
var month = 0;
var Day = 0;
var currentDate = "";
year = DateIn.getYear();
month = DateIn.getMonth() + 1;
Day = DateIn.getDate();
currentDate = year + "-";
if(month > 10){
currentDate = currentDate + month + "-";
}else{
currentDate = currentDate + "0" + month + "-";
}
if(Day > 10){
currentDate = currentDate + Day;
}else{
currentDate = currentDate + "0" + Day;
}
return currentDate;
}
//根据选择的周计算出本周的开始日和结束日
function weekToDate(weekNumber,strWeekDay,dateIn){
//输出的开始日 var outputDate_1 = "";
//输出的结束日 var outputDate_2 = "";
var tmp_date= "";
//如果选择的年月1号这一天恰好为sunday,该周monday的日期为这一天的日期-6
if(strWeekDay == '0'){
outputDate_1 = addDate(dateIn,-6);
}
//如果选择的年月1号这一天为monday,第二个参数设为0,以下以此类推。
if(strWeekDay == '1'){
outputDate_1 = addDate(dateIn,0);
}
if(strWeekDay == '2'){
outputDate_1 = addDate(dateIn,-1);
}
if(strWeekDay == '3'){
outputDate_1 = addDate(dateIn,-2);
}
if(strWeekDay == '4'){
outputDate_1 = addDate(dateIn,-3);
}
if(strWeekDay == '5'){
outputDate_1 = addDate(dateIn,-4);
}
if(strWeekDay == '6'){
outputDate_1 = addDate(dateIn,-5);
}
if(weekNumber == '1'){
outputDate_2 = dateIn;
}
if(weekNumber == '2'){
outputDate_2 = addDate(outputDate_1,+7);
}
if(weekNumber == '3'){
outputDate_2 = addDate(outputDate_1,+14);
}
if(weekNumber == '4'){
outputDate_2 = addDate(outputDate_1,+21);
}
if(weekNumber == '5'){
outputDate_2 = addDate(outputDate_1,+28);
}
if(weekNumber == '1'){
//第1周的开始日结束日计算基点都是outputDate_1,因此单独判断
document.getElementById("spnDate").value = changeDateFormat(outputDate_1);
temp_date = addDate(outputDate_1,+6);
document.getElementById("finishTime").value =changeDateFormat(temp_date);
}else{
//第2周以后的开始日结束日都以outputDate_2为计算基点
document.getElementById("spnDate").value = changeDateFormat(outputDate_2);
temp_date = addDate(outputDate_2,+6);
document.getElementById("finishTime").value =changeDateFormat(temp_date);
}
}
function getFromToDateOfSelectedWeek(){
var year = document.getElementById("sltYear");
var optionYear=year.getElementsByTagName("option");
var strYear = "" ;
for(var i=0;i<optionYear.length;++i)
{
if(optionYear[i].selected){
strYear = optionYear[i].text;
}
}
var month = document.getElementById("sltMonth");
var option = month.getElementsByTagName("option");
var strMonth = "" ;
for(var i=0;i<option.length;++i)
{
if(option[i].selected){
strMonth = option[i].text;
}
}
//根据选择的年月,组合成yyyy/mm/01的日期字符串
var sltDate_tmp_0 = strYear+ "/" + strMonth + "/" + "1";
//将日期字符串转换为日期型
var sltDate_tmp_1 = new Date(sltDate_tmp_0);
//取得该月1号所在的星期数
var weekDay = sltDate_tmp_1.getDay();
//获取页面选择的周数
var weekNumber = document.getElementById("weekNumber");
var optionWeek=weekNumber.getElementsByTagName("option");
var strWeek = "" ;
var tmp_date= "";
var outputDate_1 = "";
var outputDate_2 = "";
for(var i=0;i<optionWeek.length;++i)
{
if(optionWeek[i].selected){
strWeek = optionWeek[i].text;
}
}
//选择第1周时计算该年月1号这一天为monday到sunday各种可能性,返回该周monday到sunday的日期
//以下判断以此类推
if(strWeek == '1'){
if(weekDay == '0'){
weekToDate(strWeek,'0',sltDate_tmp_1);
}
if(weekDay == '1'){
weekToDate(strWeek,'1',sltDate_tmp_1);
}
if(weekDay == '2'){
weekToDate(strWeek,'2',sltDate_tmp_1);
}
if(weekDay == '3'){
weekToDate(strWeek,'3',sltDate_tmp_1);
}
if(weekDay == '4'){
weekToDate(strWeek,'4',sltDate_tmp_1);
}
if(weekDay == '5'){
weekToDate(strWeek,'5',sltDate_tmp_1);
}
if(weekDay == '6'){
weekToDate(strWeek,'6',sltDate_tmp_1);
}
}
if(strWeek == '2'){
if(weekDay == '0'){
weekToDate(strWeek,'0',sltDate_tmp_1);
}
if(weekDay == '1'){
weekToDate(strWeek,'1',sltDate_tmp_1);
}
if(weekDay == '2'){
weekToDate(strWeek,'2',sltDate_tmp_1);
}
if(weekDay == '3'){
weekToDate(strWeek,'3',sltDate_tmp_1);
}
if(weekDay == '4'){
weekToDate(strWeek,'4',sltDate_tmp_1);
}
if(weekDay == '5'){
weekToDate(strWeek,'5',sltDate_tmp_1);
}
if(weekDay == '6'){
weekToDate(strWeek,'6',sltDate_tmp_1);
}
}
if(strWeek == '3'){
if(weekDay == '0'){
weekToDate(strWeek,'0',sltDate_tmp_1);
}
if(weekDay == '1'){
weekToDate(strWeek,'1',sltDate_tmp_1);
}
if(weekDay == '2'){
weekToDate(strWeek,'2',sltDate_tmp_1);
}
if(weekDay == '3'){
weekToDate(strWeek,'3',sltDate_tmp_1);
}
if(weekDay == '4'){
weekToDate(strWeek,'4',sltDate_tmp_1);
}
if(weekDay == '5'){
weekToDate(strWeek,'5',sltDate_tmp_1);
}
if(weekDay == '6'){
weekToDate(strWeek,'6',sltDate_tmp_1);
}
}
if(strWeek == '4'){
if(weekDay == '0'){
weekToDate(strWeek,'0',sltDate_tmp_1);
}
if(weekDay == '1'){
weekToDate(strWeek,'1',sltDate_tmp_1);
}
if(weekDay == '2'){
weekToDate(strWeek,'2',sltDate_tmp_1);
}
if(weekDay == '3'){
weekToDate(strWeek,'3',sltDate_tmp_1);
}
if(weekDay == '4'){
weekToDate(strWeek,'4',sltDate_tmp_1);
}
if(weekDay == '5'){
weekToDate(strWeek,'5',sltDate_tmp_1);
}
if(weekDay == '6'){
weekToDate(strWeek,'6',sltDate_tmp_1);
}
}
if(strWeek == '5'){
if(weekDay == '0'){
weekToDate(strWeek,'0',sltDate_tmp_1);
}
if(weekDay == '1'){
weekToDate(strWeek,'1',sltDate_tmp_1);
}
if(weekDay == '2'){
weekToDate(strWeek,'2',sltDate_tmp_1);
}
if(weekDay == '3'){
weekToDate(strWeek,'3',sltDate_tmp_1);
}
if(weekDay == '4'){
weekToDate(strWeek,'4',sltDate_tmp_1);
}
if(weekDay == '5'){
weekToDate(strWeek,'5',sltDate_tmp_1);
}
if(weekDay == '6'){
weekToDate(strWeek,'6',sltDate_tmp_1);
}
}
}

经过测试有一个bug,当2月1日是星期一并且选择的年份是平年时,选择2月的第5周,此时第5周的开始日已经是3月而不是2月了。例如,选择2010年2月第5周此时,程序会显示2010-03-1至2010-03-07。

解决方法有两种,一是当用户选择第5周时把月份下拉框强制设定到3月。二是,将周下拉框强制设定到第4周上,并且显示2010-02-22至2010年02-28。

经过测试有一个bug,当2月1日是星期一并且选择的年份是平年时,选择2月的第5周,此时第5周的开始日已经是3月而不是2月了。

例如,选择2010年2月第5周此时,程序会显示2010-03-1至2010-03-07。

解决方法有两种,一是当用户选择第5周时把月份下拉框强制设定到3月。二是,将周下拉框强制设定到第4周上,并且显示2010-02-22至2010年02-28。

经过测试有一个bug,当2月1日是星期一并且选择的年份是平年时,选择2月的第5周,此时第5周的开始日已经是3月而不是2月了。

例如,选择2010年2月第5周此时,程序会显示2010-03-1至2010-03-07。

解决方法有两种,一是当用户选择第5周时把月份下拉框强制设定到3月。二是,将周下拉框强制设定到第4周上,并且显示2010-02-22至2010年02-28。

以上所述是小编给大家介绍的基于Javascript实现通过选择周数显示开始日和结束日的实现代码,希望对大家有所帮助!

0
投稿

猜你喜欢

  • Oracle TRIM函数是很常见的函数,下面对Oracle TRIM函数的语法作了详尽的阐述说明,希望可以让您对Oracle TRIM函数
  • 最近做网站期间遇到个问题,就是用到比较流行的lightbox效果,就是点击链接后会弹出个固定大小窗口,弹出后窗口下面的内容是被遮罩掉的,最近
  • 创作思路:主要还是想尝试做点稍微不同于整天为迎合客户而做的东西.然后闲时就开始构思,比如坐车,走路什么的.看到有一些复古手机的相关图,就想到
  • 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法
  • 导航栏是一个很好的功能,是Bootstrap 网站的一个突出特点。导航栏是响应式元组件就,作为应用程序或网站的导航标题。导航栏在移动设备的视
  • 实际开发过程中,我们经常会被各种宽度,高度计算搞晕。尤其是使用了rem的计算方式,自适应布局难倒一大片程序员。为了解决这类问题,我觉得可以利
  • 本文将想大家简单介绍一下XML HttpRequst对象基础方法,希望通过本文能够使大家对其有一个初步的了解readyState一共有5个可
  • 或许现在关心交互设计的设计师们大部分来自于了互联网行业,所以我们看到当你搜索“交互设计”时更多的BLOG和文章是在谈论互联网,网站的导航,注
  • 本文介绍了asp中 adpbe.stream 的语法,各种参数使用说明,方便大家查阅。更多请看:VBScript 速查手册(语言参考) ch
  • 问:假如我的一个表里含有(a,b,c,d)和(a,b)形成组合键。我能在列值中写这个查询吗?例如: select a,c,d from my
  • 基于web的技术中,分页是一个老的不能再老的,但大家津津乐道的问题,随着xml技术的日渐应用,把xml应用到分页当中,也是一种可能,当然网上
  • 有时候很多朋友访问自己的asp或php等程序页面时出现一些错误,就是页面无法显示也没有详细的错误信息,就算iis中开启了显示详细的错误也不能
  • 24小时内记录(即86400秒)$sql="Select video_id,count(id)as n FROM `rec_dow
  • 据了解绝大多数开发人员对于索引的理解都是一知半解,局限于大多数日常工作没有机会、也什么没有必要去关心、了解索引,实在哪天某个查询太慢了找到查
  • 本文实例讲述了PHP实现的AES加密、解密封装类与用法。分享给大家供大家参考,具体如下:<?php/** * Class AES *
  • 其主要的优点便是无需再手工添加大量的信息了,可以指定对某一个站信息的截取进行批量录入,达到省时省力的目的。与其单纯的ASP小偷程序不同的是:
  • 尽管可能是个比较老的话题了,但是我还是从来没有整理过。今天在《精通HTML》一书中看到,这里整理一下。在XHTML中,<html>
  • 最近尝试了mysql的最新版本5.5.581.最新发布的mysql 5.5.8没有适合solaris 9的版本;这个在安装时需要注意2.它发
  • 阅读上一节:无序列表信息有时候是无序归纳的,有的却有着明确的顺序,在上一篇也提到了。那么简单的来想一下身边有哪些事物是有先后顺序的:操作步骤
  • 一直很想就搜索结果页写一些心得文章出来,甚至连目录都整理好了可是就是一直没有动手。因为总是觉得还差很多东西需要研究需要分析需要验证。最近也组
手机版 网络编程 asp之家 www.aspxhome.com