`
xlcai
  • 浏览: 19965 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

js动态操作select,按周得到workday工作日的日期段即每月的周一到周五

 
阅读更多

最近一个项目需要统计每周的工作情况,需要一个select列表,可以选择填写某个周的工作情况。option列表是根据前面选择的年份月份动态显示的。将选择的月份按周去掉周六日显示周一到周五的日期。设计如下:

					<select id="cyear" onchange="showWorkday()">
						<option value="2012">2012</option>
						<option value="2013">2013</option>
						<option value="2014">2014</option>
						<option value="2015">2015</option>
						<option value="2016">2016</option>
						<option value="2017">2017</option>
						<option value="2018">2018</option>
						<option value="2019">2019</option>
						<option value="2020">2020</option>
						<option value="2021">2021</option>
						<option value="2022">2022</option>
					</select> 
					<select id="cmonth" onchange="showWorkday()">
						<option value="1">1</option>
						<option value="2">2</option>
						<option value="3">3</option>
						<option value="4">4</option>
						<option value="5">5</option>
						<option value="6">6</option>
						<option value="7">7</option>
						<option value="8">8</option>
						<option value="9">9</option>
						<option value="10">10</option>
						<option value="11">11</option>
						<option value="12">12</option>
					</select> 
					<select id="cworkday">
					</select>


function showWorkday(){
		 $("#cworkday").html("");//先将显示周日期的列表清空
		var year=document.getElementById('cyear').value;//得到选择的年份
		var month=document.getElementById('cmonth').value;//得到月份
		var date = new Date();
		date.setFullYear(year);
		date.setMonth(month-1);//当前月-1
		date.setDate(1);
		var weeknumber = date.getDay();//该月第一天是星期几
		//alert(weeknumber);
		var monthday=30;//此月的天数,默认30
		if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){//每月多少天
		 monthday=31;
		}
		if(month==4||month==6||month==9||month==11){
		 monthday=30;
		}
		if(month==2){
		if((year%4==0&&year%100!=0)||(year%400==0)){
		 monthday=29;
		}
		if(!(year%4==0&&year%100!=0)||(year%400==0)){
		 monthday=28;
		}
		}
		
		var monthdaybefore=30;//该月上一个月的天数
		var monthbefore;//上一个月的月份
		var yearbefore=year;//上一个月的年份默认是选择的年份
		if(month!=1){//如果选择的不是1月
			monthbefore=month-1;//上个月的月份是此月份减1		
if(monthbefore==1||monthbefore==3||monthbefore==5||monthbefore==7||monthbefore==8||monthbefore==10||monthbefore==12){//同理得到上个月的月份有多少天	monthdaybefore=31;
		}
		if(monthbefore==4||monthbefore==6||monthbefore==9||monthbefore==11){
		 monthdaybefore=30;
		}
		if(monthbefore==2){
		if((year%4==0&&year%100!=0)||(year%400==0)){
		 monthdaybefore=29;
		}
		if(!(year%4==0&&year%100!=0)||(year%400==0)){
		 monthdaybefore=28;
		}
		}
		}else{//如果选择的月是1月
		monthbefore=12;//则上一个月是12月
		yearbefore=year-1;//上一月的年份是选择的年份减1
if(monthbefore==1||monthbefore==3||monthbefore==5||monthbefore==7||monthbefore==8||monthbefore==10||monthbefore==12){//每月多少天
		 monthdaybefore=31;
		}
		if(monthbefore==4||monthbefore==6||monthbefore==9||monthbefore==11){
		 monthdaybefore=30;
		}
		if(monthbefore==2){
		if(((yearbefore-1)%4==0&&(yearbefore-1)%100!= 0)||((yearbefore-1)%400==0)){//闰年用上一个月的年份做判断
		 monthdaybefore=29;
		}
		if(!((yearbefore-1)%4==0&&(yearbefore-1)%100!=0)||((yearbefore-1)%400==0)){
		 monthdaybefore=28;
		}
		}
		}
		//alert(monthday)
		//有了此月及上个月的天数年份,及第一天是周几,就可以分情况得到此月的工作周了
		if(weeknumber==1){//第一天是周一那选择列表就是1号到5号,8号到13号。。。。i做为日期起的基数,j做为日期止的基数
			for(i=1,j=(i+4);i<=monthday&&j<=monthday;i=i+7,j=i+4){//j每次比i大4,i每次循环加一周加7
			$("#cworkday").append("<option  value='o' >"+year+"-"+month+"-"+i+"~"+year+"-"+month+"-"+j+"</option>");
			}//输出格式可以自己改
		}
		if(weeknumber==2){//第一天是周二则第一周的周一包含了上个月的日期。先输出第一个工作周		
			$("#cworkday").append("<option  value='o' >" +yearbefore+"-"+monthbefore+"-"+monthdaybefore+"~"+year+"-"+month+"-4"+"</option>");			
			for(i=7,j=(i+4);i<=monthday&&j<=monthday;i=i+7,j=i+4){//相应第二周的周一为7号(手算为7号)再去循环
			$("#cworkday").append("<option  value='o' >"+year+"-"+month+"-"+i+"~" +year+"-"+month+"-"+j+"</option>");
			}			
		}
		if(weeknumber==3){//第一天是周三 同理		
			$("#cworkday").append("<option  value='o' >"+yearbefore+"-"+monthbefore+"-"+(monthdaybefore-1)+"~"+year+"-"+month+"-3"+"</option>");			
			for(i=6,j=(i+4);i<=monthday&&j<=monthday;i=i+7,j=i+4){
			$("#cworkday").append("<option  value='o' >"+year+"-"+month+"-"+i+"~" +year+"-"+month+"-"+j+"</option>");
			}			
		}
		if(weeknumber==4){//第一天是周四			
			$("#cworkday").append("<option  value='o' >"+yearbefore+"-"+monthbefore+"-"+(monthdaybefore-2)+"~"+year+"-"+month+"-2"+"</option>");			
			for(i=5,j=(i+4);i<=monthday&&j<=monthday;i=i+7,j=i+4){
			$("#cworkday").append("<option  value='o' >"+year+"-"+month+"-"+i+"~"+year+"-"+month+"-"+j+"</option>");
			}			
		}
		if(weeknumber==5){//第一天是周五			
			$("#cworkday").append("<option  value='o' >"+yearbefore+"-"+monthbefore+"-"+(monthdaybefore-3)+"~"+year+"-"+month+"-1"+"</option>");			
			for(i=4,j=(i+4);i<=monthday&&j<=monthday;i=i+7,j=i+4){
			$("#cworkday").append("<option  value='o' >" +year+"-"+month+"-"+i+"~" +year+"-"+month+"-"+j+"</option>");
			}			
		}
		if(weeknumber==6){//第一天是周六		
			for(i=3,j=(i+4);i<=monthday&&j<=monthday;i=i+7,j=i+4){
			$("#cworkday").append("<option  value='o' >" +year+"-"+month+"-"+i+"~" +year+"-"+month+"-"+j+"</option>");
			}			
		}
		if(weeknumber==0){//第一天是周日		
			for(i=2,j=(i+4);i<=monthday&&j<=monthday;i=i+7,j=i+4){
			$("#cworkday").append("<option  value='o' >" +year+"-"+month+"-"+i+"~" +year+"-"+month+"-"+j+"</option>");
			}			
		}
		
	}


最终效果如图

Java学习交流群: 2177712

分享到:
评论

相关推荐

    jquery动态生成select工作日列表Workday

    在这个特定的项目中,“jquery动态生成select工作日列表Workday”是利用jQuery来实现一个功能,该功能可以动态地创建一个SELECT元素,并填充每月周一至周五的工作日日期。 首先,我们需要理解“select”元素在HTML...

    oracle函数得到下一个法定工作日期

    在Oracle数据库中,获取下一个法定工作日期是一个常见的需求,尤其在进行日程安排或业务处理时。本篇文章将深入探讨如何使用Oracle内置函数以及自定义函数来实现这一功能。我们将结合具体的代码示例来理解这一过程。...

    SQL工作日计算,只排除周末

    - 如果当前日期是一周中的周一到周五之一,则将`@workday`递增1。 - 最后,返回`@workday`作为结果。 #### 应用场景 该函数可以广泛应用于各种业务场景,例如: - **项目管理**:计算项目的预计完成日期。 - **...

    利用Excel WORKDAY函数计算基金赎回入账日期.rar

    在Excel中,WORKDAY函数是一个非常实用的工具,尤其对于财务和投资领域的工作者而言,它可以帮助我们处理工作日的计算,比如确定基金赎回后的入账日期。本例中,我们有一个名为"15.20 计算基金赎回入账日期.xls"的...

    Java 工作日计算

    //计算15个工作日之后的工作日日期 Date date = workdayUtils.getWorkday(new Date(), 15); //计算两个日期之间的工作日总数 int count = workdayUtils.getWorkdayCount(new Date(), format.parse("2013-08-13"));

    2025年工作日workday MySQL文件

    2025年 工作日

    工作日计算函数

    通常,一周有五个工作日(周一至周五),周六和周日被视为非工作日。如果存在公共假期,这些日期也需要排除在外。计算工作日差值时,我们需要从起始日期开始,逐天向前或向后遍历,直到达到结束日期,但要跳过非工作...

    求两个日期之间的工作日,剔除节假日,加上调休

    不需要编程,纯使用函数解决,求两个日期之间的工作日 1. 解决法定节假日 2. 解决调休等特殊日子 3. 需要每年维护一次“特殊日期”清单,记录每年的特殊节日,也可以自己加特殊日期,比如公司内部统一放假或加班,...

    workday.zip

    【标题】"workday.zip"所包含的项目是一个用C++语言编写的程序,用于计算工作日。这个程序特别设计了处理国家法定节假日和调休日的功能,可以在Visual Studio 2019环境下进行开发和运行。通过读取配置在ini文件中的...

    2025日历sql语句:状态【0工作日 1周末休息 2节假日】

    2025日历sql语句,拿走直接用。

    chinese-workday:中国工作日,用于查询某天是否是工作日、节假日、是否要补班

    中国工作日 今天要上班吗? 安装 $ npm install chinese-workday 用法 // const { isWorkday, isHoliday, getFestival } = require('chinese-workday'); const ww = require ( 'chinese-workday' ) ; const ...

    Workday_HCM_Overview.pdf

    Workday是人力资源管理软件市场中的一个领导者,由Dave Duffield和Aneel Bhusri在2005年创立,以提供基于云的人力资源、财务管理和分析解决方案,特别是针对人才资本管理(HCM)。Workday提供了一套广泛的功能,涵盖了...

    巧用Office Excel自动工作日计算

    - 假设我们需要计算2023年10月1日至10月31日之间的工作日数量,不包括国庆节假期(10月1日至10月7日)。 - 在Excel中设置如下: - B2单元格输入起始日期`2023-10-01`; - B3单元格输入结束日期`2023-10-31`; -...

    节假日判断函数

    工作日计算的规则是根据每周5个工作日的规则进行的,即周一到周五为工作日,周六和周日为非工作日。 知识点8:节假日表的维护 节假日表需要定期维护,例如增加新的节假日、删除过期的节假日等,以确保节假日信息的...

    workday:使用工作日API的示例代码

    工作日(Workday)是一款云端的人力资源管理软件,提供了丰富的API接口,允许开发者通过编程方式与工作日系统进行交互,实现自动化任务、数据提取、报告生成等功能。在这个"workday"的压缩包中,我们可以预见到包含...

    holiday_workday:用于设置假期和工作日的Rails引擎

    假期工作日设置假期和工作日,然后得到几周(不... mount HolidayWorkday :: Engine , at : "/holiday_workday"end用法然后转到切换假日和工作日然后,您可以获得包括工作日在内的几周,但不包括假期 HolidayWorkday

    到期提醒单(WORKDAY.INTL函数、NETWORKDAYS.INTL函数、IF函数、COUNTIF函数)

    WPS excel表格:到期提醒单,【WORKDAY.INTL函数】的功能:计算指定日期之前或者之后几个工作日的日期序列号即Excel中存储的日期。【NETWORKDAYS.INTL函数】:返回两个日期之间的所有工作日数,使用参数指示哪些天是...

    2025年日历excel和Oracle新增sql(标记上班日,周末,节假日)

    1、根据2024年11月12日所颁发的《2025年部分节假日安排的通知》文件中的通知内容所整理,手动整理了2025年的日历,并标注了工作日,周末,节假日 2、压缩包内有2个文件: ①.Excel表列举了2025年所有日期,并标记了...

    如何在excel中实现工作日的计算【会计实务操作教程】.pptx

    Workday() 函数的作用是计算某日期之前或之后相隔指定工作日的某一日期的日期值,该函数也带有三个参数:start_date、days 和 holidays。其中,start_date 表示开始日期,days 表示 start_date 之前或之后不含周末及...

    2020年工作日数据表包含sql.zip

    通过SQL,用户可以执行各种查询,比如查找特定日期的类型,统计每个月的工作日数量,或者找出所有补班日等。 此外,对于不熟悉SQL的用户,Excel文件提供了一个直观的方式来查看和编辑数据。Excel的特性,如排序、...

Global site tag (gtag.js) - Google Analytics