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

最近在一个项目中遇到一个查询页面,其中一个查询条件是根据选择的年份、月以及周数显示选择的该周从几号到几号,这样一个需求。在网上搜索了一下,有类似的但是没有完全一样的,只好自己动手。思路是首先取得所选择的该年月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)

相关推荐

  • js实现日历可获得指定日期周数及星期几示例分享(js获取星期几)

    应为要有交互,选择了Js来实现,也算是 结对编程 的初试吧. 我将显示部分用html 写好,点击的按钮触发事件函数是check(): 复制代码 代码如下: function onCheck(){ var Year = document.getElementById("year").value; //获取文本框的"年" var theYear =Year * 1; //转换为number类型 //alert(theYear); // 获取月值 var month =

  • js获取指定日期周数以及星期几的小例子

    JS获取日期时遇到如下需求,根据某年某周获取一周的日期.如开始日期规定为星期四到下一周的星期五为一周. 代码如下: function getNowFormatDate(theDate) { var day = theDate; var Year = 0; var Month = 0; var Day = 0; var CurrentDate = ""; // 初始化时间 Year= day.getFullYear();// ie火狐下都可以 Month= day.getMonth()+

  • JS获取月份最后天数、最大天数与某日周数的方法

    本文实例讲述了JS获取月份最后天数.最大天数与某日周数的方法.分享给大家供大家参考,具体如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>标题页</title> <script language="javascript"> function getLastDay(year,month) { var new_year = year; /

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

    最近在一个项目中遇到一个查询页面,其中一个查询条件是根据选择的年份.月以及周数显示选择的该周从几号到几号,这样一个需求.在网上搜索了一下,有类似的但是没有完全一样的,只好自己动手.思路是首先取得所选择的该年月1号这一天是星期几,然后算出这一周中周一的日期. 以此为基点,第1周的结束日即为这一天加6,第2周的开始日为这一天加7,结束日为这一天加13,以此类推,直到推算出第5周的开始日和结束日. 具体代码如下: //该方法有两个参数,date是给定的日期型参数,days是需要在该日期进行加减的天数.

  • Element-ui DatePicker显示周数的方法示例

    1.场景描述 我们公司是做电商的,运营的工作指标都是按周来定的,所以他们对周特别敏感,希望我们能在日期选择器上显示周数.刚接到这个需求时,心中很不乐意,因为Element-ui的日期选择器根本不支持显示周数.我只能看看源码来看看能否有解决的办法 具体代码大家可以在github中看到https://github.com/ElemeFE/element/pull/16415/commits/2b810cf73d1127645054265469bbb353d036cb21 2.查看源码 我们很轻松就能

  • JavaScript实现的选择排序算法实例分析

    本文实例讲述了JavaScript实现的选择排序算法.分享给大家供大家参考,具体如下: 简单选择排序是人们最熟悉的比较方式,其算法思想为:从数组的开头开始,将第一个元素和其他元素进行比较.检查完所有元素后,最小的元素会被放到数组的第一个位置,然后算法会从第二个位置继续.这个过程会一直进行,当进行到数组的倒数第二个位置时,所有的数据便完成了排序. 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-

  • 利用Java中Calendar计算两个日期之间的天数和周数

    前言 究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历.阴(农)历之分.它们的区别在哪呢? 比如有: 月份的定义 - 阳`(公)历 一年12 个月,每个月的天数各不同:阴(农)历,每个月固定28天 每周的第一天 - 阳(公)历星期日是第一天:阴(农)历,星期一是第一天 实际上,在历史上有着许多种纪元的方法.它们的差异实在太大了,比如说一个人的生日是"八月八日" 那么一种可能是阳(公)历的八月八日,但也可以是阴(农)历的日期.所以为了计时

  • javascript实现输出指定行数正方形图案的方法

    本文实例讲述了javascript实现输出指定行数正方形图案的方法.分享给大家供大家参考.具体如下: javascript实现输出指定行数的正方形图案:点击生成图案,会有2个提示框,1,输入图案的组成字符,只能是1个字符哦2,输入正方形行数,路过大于10,会设置为10行数 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd

  • JavaScript 冒泡排序和选择排序的实现代码

    废话不多说了,直接给大家贴代码了,具体代码如下所述: var array = [1,2,3,4,5]; // ---> 服务 //效率 ---> 针对一个有序的数组 效率最高 //标志 true false for(var j = 0; j < array.length - 1;j++ ){ //- j 每次排序完成之后 后面减少比较的次数 var isTrue = true; //如果数组本身就是升序,则直接输出 for(var i = 0; i < array.length -

  • js实现键盘上下左右键选择文字并显示在文本框的方法

    本文实例讲述了js实现键盘上下左右键选择文字并显示在文本框的方法.分享给大家供大家参考.具体实现方法如下: <!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&quo

  • JavaScript 如何计算文本的行数的实现

    需求:根据行数决定是否限制展开和收起. 思路:用2个块统计行高,一个不加高度限制用来统计行数(css隐藏),一个加高度限制用来显示(加高度限制会导致统计行数不准) 要想知道文本的行数,那就需要知道文本的总高度和每一行的高度,总高度除以行高就是行数.当然总高度的计算必须是文字所在的 DOM 没有对高度的限制,随着文本的增加 DOM 要随之变高才行:最后还要考虑 DOM 的样式padding和margin对高度的影响.这样一来我们就可以计算出文本的行数了.总结一下我们需要如下几步: 克隆文本所在的

  • JavaScript实现下拉列表选择框

    本文实例为大家分享了JavaScript实现下拉列表选择框的具体代码,供大家参考,具体内容如下 创建一个页面 ** 两个下拉选择框     - 设置属性 multiple属性 -multiple="multiple"(下拉选择框多行显示) ** 四个按钮,有事件 tip:多选按住ctrl或者shift点击选项 代码如下: <html > <head> <title>HTML示例</title> <style type = "

随机推荐