JS获取今天的开始和结束,本周的开始和结束,本月的开始和结束

直接上代码(我自己没有测试过本周和本月的函数):

var initDateTools = (function(){
  // 获取今天的开始:00:00:00:00
  function getTodayStartTime(){
    return new Date(new Date().setHours(0, 0, 0, 0));
  }
  // 获取今天的结束
  function getTodayEndTime(){
    return new Date(new Date().setHours(23, 59, 59, 0));
  }
  // 获取本周的开始
  function getWeekStartTime(){
    var now = new Date();
    // 获取今天是星期几
    var weekDay = now.getDay() || 7;
    var date = now.getDate(); // 今天几号
    // 为什么要额外减一呢?
    /**
     * 假如今天是周一,则weekDay是1
     * 今天恰好是这周的开始,所以应该减去0,而不是1
     * 同理,今天是周二,则减去1,得到这周开始的那天;
     */
    var startTime = new Date(new Date(now.setDate(date - weekDay - 1)).setHours(0, 0, 0, 0));
    return startTime;
  }
  // 获取本周的结束
  function getWeekEndTime(){
    var now = new Date();
    var weekDay = now.getDay() || 7;
    var date = now.getDate();

    var endTime = new Date(new Date(now.setDate(date + 7 - weekDay)).setHours(23, 59, 59, 0));
    return endTime;
  }
  // 获取本月的开始
  function getMonthStartTime(){
    var now = new Date();
    // 每个月都是从1号开始的
    return new Date(new Date(now.setDate(1)).setHours(0, 0, 0, 0));
  }
  // 获取本月的结束
  function getMonthEndTime(){
    // 思路
    /**
     * 1. 先获取下一月的第一天的时间戳
     * 2. 然后减去一天的时间计算得出本月的最后一天
     */
    var now = new Date();
    var nextMonth = now.getMonth() + 1;
    // 下一个月第一天的时间戳
    var firstDay = new Date(now.setMonth(nextMonth)).setDate(1);
    return new Date(new Date(firstDay - 1000 * 60 * 60 * 24).setHours(23, 59, 59, 0));
  }

  return{
    getTodayStartTime: getTodayStartTime,
    getTodayEndTime: getTodayEndTime,
    getWeekStartTime: getWeekStartTime,
    getWeekEndTime: getWeekEndTime,
    getMonthStartTime: getMonthStartTime,
    getMonthEndTime: getMonthEndTime
  }
})();