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. 获取前一月的总天数
    1 var a = new Date(), total = 0;
    2 a.setDate(0);
    3 total = a.getDate(); // 30
  2. 计算两个日期之间的时间差:
    1 var total = new Date('2014/10/13') - new Date();

     

posted @ 2014-10-12 17:05  码无痕  阅读(2193)  评论(0编辑  收藏  举报