zoukankan      html  css  js  c++  java
  • 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();
  • 相关阅读:
    MATLAB使用fft求取给定音频信号的频率
    python实现抓取必应图片设置桌面
    [原创]Nexus5 移植OneStep
    [原创]Nexus5 内核编译烧录过程记录
    repo版本切换
    pthread
    《Android进阶》Sqlite的使用
    【转】iOS夯实:ARC时代的内存管理
    【转】如何使App从后台返回前台时,显示指定界面
    【转】自定义UITableViewCell(registerNib: 与 registerClass: 的区别)
  • 原文地址:https://www.cnblogs.com/mawuhen/p/4020757.html
Copyright © 2011-2022 走看看