原生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 获取的则是当前日期所在周的日期。

转载于:https://www.cnblogs.com/crystal827/p/9413542.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值