JS计算指定日期是距今的第几周,星期几
无意中在百度知道上发现这样一个问题,就抽时间见写了一个函数。
首先我们需要明确,既然是指定日期距今的第几周,那么就要知道指定的日期是什么,而且是不能确定的,会根据使用者不同而得到不同的日期,所以我们需要将这个日期设置为参数,由使用者决定。
下面我们一起来看一下这段代码:
1 (function(){ 2 /* 3 * 说明: 4 * 一周的起始计算方式不同国家有所不同,很多其他国家将周日作为一周的开始 5 * 本代码使用中国习惯,将周一作为每周的开始 6 * 特此说明 7 */ 8 9 function TodayInfo(start) { 10 var WEEKLEN = 7, // 一周7天为常量 11 WEEKDAYS = ["日", "一", "二", "三", "四", "五", "六"], 12 weekInfo = {"week": null, "day": null}, // 初始化返回信息,默认第null周,星期null 13 oneDay = 24 * 60 * 60 * 1000, // 一天的毫秒时长 14 weekLeave, // 开学当天所在周剩余天数 15 weekStart, // 开学当天start是星期几 16 today, // 今天 17 dateDiff, // 今天与开学当天日期差 18 sDate; //开学之日,日期对象 19 var rDateStr = /\d{4}[\/-]\d{1,2}[\/-]\d{1,2}/g; // 简单的日期格式校验:2013/12/19 20 if (!rDateStr.test(start)) { 21 alert("请使用合法的开学日期!!!"); 22 return weekInfo; 23 } 24 sDate = new Date(start.replace("-", "/")); 25 weekStart = sDate.getDay(); 26 weekStart = weekStart === 0 ? 7 : weekStart; // JS中周日的索引为0,这里转换为7,方便计算 27 28 weekLeave = WEEKLEN - weekStart; 29 today = new Date(); 30 weekInfo.day = WEEKDAYS[today.getDay()]; 31 today = new Date(today.getFullYear() + "/" + (today.getMonth() + 1) + "/" + today.getDate()); 32 dateDiff = today - sDate; 33 if (dateDiff < 0) { 34 alert("别开玩笑了,你还没开学呢!!!"); 35 return weekInfo; 36 } 37 dateDiff = parseInt(dateDiff / oneDay); 38 weekInfo.week = Math.ceil((dateDiff - weekLeave) / WEEKLEN) + 1; 39 return weekInfo; 40 } 41 // 测试结果 42 var td = TodayInfo("2013/12/16"); 43 console.log("今天是自2013/12/16日,开学以来的第 " + td.week + " 周,今天星期" + td.day); 44 td = TodayInfo("2013/11/11"); 45 console.log("今天是自2013/11/11日,开学以来的第 " + td.week + " 周,今天星期" + td.day); 46 td = TodayInfo("2013/09/01"); 47 console.log("今天是自2013/09/01日,开学以来的第 " + td.week + " 周,今天星期" + td.day); 48 td = TodayInfo("2013/12/29"); 49 console.log("今天是自2013/12/29日,开学以来的第 " + td.week + " 周,今天星期" + td.day); 50 })();
这里在跟大家介绍一些关于Date对象的使用技巧:
- 获取前一月的总天数
1 var a = new Date(), total = 0; 2 a.setDate(0); 3 total = a.getDate(); // 30
- 计算两个日期之间的时间差:
1 var total = new Date(‘2014/10/13‘) - new Date();
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。