原生js实现日历组件逻辑代码

( function ()  {
  var nowDate = new Date();
  var weekE = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'];
  var dateArr = []; //保存当前日期所在周一周的日期
  var now_year = nowDate.getFullYear(); //当前年
  var now_month = nowDate.getMonth() + 1; //当前月
  var now_date = nowDate.getDate(); //当前日期
  var now_week = nowDate.getDay(); //当前星期几
  var monthNum = 0; //当月天数
  var prevMonthNum = 0; //上月天数

  //获取某月的天数 该月所在年份,该月月份
  function getDateNum(year, month) {
    var n = new Date(year, month, 0);
    return n.getDate();
  }
  //当月天数
  monthNum = getDateNum(now_year, now_month, 0);
  //获取上月天数 判断是否跨年情况
  function getPrevMonth(year, month) {
  var prevMN;
  if(month == 1) {
    prevMN = getDateNum(year - 1, 12);
  }else {
    prevMN = getDateNum(year, month, 0);
  }
  return prevMN
  }
  prevMonthNum = getPrevMonth(now_year, now_month);


  //将星期转化为中文 week当前星期几
  function changeM(week) {
    return weekE[week - 1];
  }

  //给出当前日期所在周后几天日期 monthNum当月天数,now_date当前日期,now_week当前是星期几
  function restDate(monthNum, now_date, now_week) {
    var nextArr = []; //保存当前星期后几天日期
    if (parseInt(monthNum - now_date) < parseInt(7 - now_week)) {
      var overNum = parseInt(7 - now_week) - parseInt(monthNum - now_date); //超出天数
      for(var j = parseInt(now_date + 1); j <= monthNum; j++) {
      nextArr.push(j);
    }
    for(var i = 1; i<overNum + 1; i++) {
      var nextNum = "0" + i;
      nextArr.push(nextNum);
    }
    }else{
      for (var i = 1; i <= parseInt(7 - now_week); i++) {
        if(parseInt(now_date + i) <= 9) {
          nextArr.push("0" + parseInt(now_date + i));
        }else {
          nextArr.push(parseInt(now_date + i));
        }
      }
    }
    return nextArr;
  }


  //给出当前日期所在周前几天日期 monthNum上月天数,now_date当前日期,now_week当前是星期几
  function prevDate(monthNum, now_date, now_week) {
    var prevArr = []; //保存当前星期前几天日期
    if (parseInt(now_date) < parseInt(now_week)) {
      var overNum = parseInt(now_week) - parseInt(now_date); //超出天数
      for(var i = parseInt(monthNum - overNum + 1); i <= parseInt(monthNum); i++) {
        prevArr.push(i);
      }
      for(var j = 1; j <= now_date; j++) {
        prevArr.push("0" + j);
      }
    }else{
      for (var i = 0; i < parseInt(now_week); i++) {
        prevArr.push(parseInt(now_date - i));
      }
      prevArr.reverse();
    }
    return prevArr;
  }
  dateArr = prevDate(prevMonthNum, now_date, now_week).concat(restDate(monthNum, now_date, now_week));

})()

 

以上,dateArr 获取的则是当前日期所在周的日期。

posted @ 2018-08-03 12:54  chrily  阅读(932)  评论(0)    收藏  举报