判断今天属于这月的第几周,并展示这一周的日期(含自定义日期拼接显示)

版权声明: https://blog.csdn.net/LMlikoSakura/article/details/82881183

这个可以用于签到打卡

本周信息的展示

思路很简单:

首先获取这个月的1号是星期几,如果就是星期一就很简单这就是第一周的第一天然后向后面推算就可以计算出剩下的信息

如果是星期二需要向上一个月推算一天,就必须获取这个月分知道上一个月有多少天,如果这个月是一月上一个月就是1-1=0就是十二月,然后分组31天一组30天一组然后就是二月你需要判断这个二月有多少天

星期三,四。。。同理,然后判断今天日期于这几周的开始借宿比较推出是第几周


【注意】在使月份的时候是从零开始的所以需要.getMonth()+1

代码如下(全部使用原生js所以比较繁琐且有许多可以优化的地方)

// 将信息显示出来
  function getMonth(month) {
    switch (month) {
      case 1:
        month = "Jan";
        break;
      case 2:
        month = "Feb";
        break;
      case 3:
        month = "Mar";
        break;
      case 4:
        month = "Apr";
        break;
      case 5:
        month = "May";
        break;
      case 6:
        month = "Jun";
        break;
      case 7:
        month = "Jul";
        break;
      case 8:
        month = "Aug";
        break;
      case 9:
        month = "Sep";
        break;
      case 10:
        month = "Oct";
        break;
      case 11:
        month = "Nov";
        break;
      case 12:
        month = "Dec";
        break;
    }
    init = new Date(month + " 01 2018 00:00:00 GMT+0800 (中国标准时间)");
  }

  // 获取这个月一号是星期几
  //
  function getWeek(week) {
    if (week == "Mon") {
      week = 1;
      // //console.log(week);
    }
    if (week == "Tue") {
      week = 2;
      // //console.log(week);
    }
    if (week == "Wed") {
      week = 3;
      // //console.log(week);
    }
    if (week == "Thu") {
      week = 4;
      // //console.log(week);
    }
    if (week == "Fri") {
      week = 5;
      // //console.log(week);
    }
    if (week == "Sat") {
      week = 6;
      // //console.log(week);
    }
    if (week == "Sun") {
      week = 7;
      // //console.log(week);
    }
    return week;
  }

  function getNumWeek() {
    // getMonth(month);
    week = new String(init).slice(0, 3); //获取星期几
    // //console.log(week);
    week = getWeek(week);
  }
  getNumWeek();
  //console.log('week' + week);
  if (week == 1) {
    day = 1;
  }
  if (week == 2) {
    // 上个月最后一天
    if (month > 1) month = month - 1;
    if (month == 1) month = 12;
    // 29 另行判断
    if (month == 2) day = 28;
    if (
      month == 1 ||
      month == 3 ||
      month == 5 ||
      month == 7 ||
      month == 8 ||
      month == 10 ||
      month == 12
    )
      day = "31";
    if (month == 4 || month == 6 || month == 9 || month == 11) day = 30;
  }
  if (week == 3) {
    // 上个月倒数第二天
    month = month - 1;
    if (month == 2) day = 27;
    if (
      month == 1 ||
      month == 3 ||
      month == 5 ||
      month == 7 ||
      month == 8 ||
      month == 10 ||
      month == 12
    )
      day = "30";
    if (month == 4 || month == 6 || month == 9 || month == 11) day = 29;
  }
  if (week == 4) {
    // 上个月倒数第三天
    month = month - 1;
    if (month == 2) day = 26;
    if (
      month == 1 ||
      month == 3 ||
      month == 5 ||
      month == 7 ||
      month == 8 ||
      month == 10 ||
      month == 12
    )
      day = "29";
    if (month == 4 || month == 6 || month == 9 || month == 11) day = 28;
  }
  if (week == 5) {
    // 上个月倒数第四天
    month = month - 1;
    if (month == 2) day = 25;
    if (
      month == 1 ||
      month == 3 ||
      month == 5 ||
      month == 7 ||
      month == 8 ||
      month == 10 ||
      month == 12
    )
      day = "28";
    if (month == 4 || month == 6 || month == 9 || month == 11) day = 27;
  }
  if (week == 6) {
    // 上个月倒数第五天
    month = month - 1;
    if (month == 2) day = 24;
    if (
      month == 1 ||
      month == 3 ||
      month == 5 ||
      month == 7 ||
      month == 8 ||
      month == 10 ||
      month == 12
    )
      day = "27";
    if (month == 4 || month == 6 || month == 9 || month == 11) day = 26;
  }
  if (week == 7) {
    // 上个月单数第六天
    month = month - 1;
    if (month == 2) day = 23;
    if (
      month == 1 ||
      month == 3 ||
      month == 5 ||
      month == 7 ||
      month == 8 ||
      month == 10 ||
      month == 12
    )
      day = "26";
    if (month == 4 || month == 6 || month == 9 || month == 11) day = 25;
  }
  var start = year + "-" + month + "-" + day;
  day = (2 * day) / 2;
  var oday;
  if (
    month == 1 ||
    month == 3 ||
    month == 5 ||
    month == 7 ||
    month == 8 ||
    month == 10 ||
    month == 12
  )
    oday = 31;
  if (month == 4 || month == 6 || month == 9 || month == 11) oday = 30;
  // oday = 29;
  if (month == 2) oday = 28;
  if (day >= oday - 5) month++;
  if (month > 12) month = 1;

  //console.log('oday:' + oday);
  if (day + 6 > oday) day = day - oday;
  //console.log('day:' + day);
  var end = year + "-" + month + "-" + (day + 6);
  week1 = { start: start, end: end };
  //console.log(week1);
  start = year + "-" + month + "-" + (day + 6 + 1);
  end = year + "-" + month + "-" + (day + 6 + 1 + 6);
  week2 = { start: start, end: end };
  start = year + "-" + month + "-" + (day + 6 * 2 + 1 * 2);
  end = year + "-" + month + "-" + (day + 6 * 2 + 1 * 2 + 6);
  week3 = { start: start, end: end };
  start = year + "-" + month + "-" + (day + 6 * 3 + 1 * 3);
  end = year + "-" + month + "-" + (day + 6 * 3 + 1 * 3 + 6);
  week4 = { start: start, end: end };
  //console.log(week4);
  start = year + "-" + month + "-" + (day + 6 * 4 + 1 * 4);
  // 最后一周的情况需要分析;
  oday = mGetDate(year, month);
  //console.log(oday);
  if (day + 6 * 4 + 1 * 4 + 6 - oday > 0) month++;
  if (day + 6 * 4 + 1 * 4 + 6 - oday > 0)
    end = year + "-" + month + "-" + (day + 6 * 4 + 1 * 4 + 6 - oday);
  if (day + 6 * 4 + 1 * 4 + 6 - oday <= 0)
    end = year + "-" + month + "-" + (day + 6 * 4 + 1 * 4 + 6);
  week5 = { start: start, end: end };
  count = 10;
  var _week1 = document.getElementById("week1");
  var _week2 = document.getElementById("week2");
  var _week3 = document.getElementById("week3");
  var _week4 = document.getElementById("week4");
  var _week5 = document.getElementById("week5");
  judge(date);
  sel();
  //
};
function mGetDate(year, month) {
  var day = new Date(year, month, 0);
  return day.getDate();
}
function dateConvert(dateParms) {
  // 对传入的时间参数进行判断
  if (dateParms instanceof Date) {
    var datetime = dateParms;
  }
  //判断是否为字符串
  if (typeof dateParms == "string" && dateParms.constructor == String) {
    //将字符串日期转换为日期格式
    var datetime = new Date(Date.parse(dateParms.replace(/-/g, "/")));
  }
  //获取年月日时分秒
  var year = datetime.getFullYear();
  var month = datetime.getMonth() + 1;
  var date = datetime.getDate();
  var hour = datetime.getHours();
  var minutes = datetime.getMinutes();
  var second = datetime.getSeconds();
  //月,日小于10时,补0
  if (month < 10) {
    month = "0" + month;
  }
  if (date < 10) {
    date = "0" + date;
  }
  //拼接日期格
  var time = year + "-" + month + "-" + date;
  //返回处理结果
  return time;
}
function sel() {
  var select = document.getElementsByTagName("select")[0];
  var start = document.getElementById("start");
  var end = document.getElementById("end");
  // //console.log(select);
  // //console.log(week1 + 'week1:');
  // //console.log(count);
  if (select.value == "第一周") {
    start.value = dateConvert(week1.start);
    //  week1.start;
    end.value = dateConvert(week1.end);
  }
  if (select.value == "第二周") {
    start.value = dateConvert(week2.start);
    end.value = dateConvert(week2.end);
  }
  if (select.value == "第三周") {
    start.value = dateConvert(week3.start);
    end.value = dateConvert(week3.end);
  }
  if (select.value == "第四周") {
    // alert(4);
    start.value = dateConvert(week4.start);
    end.value = dateConvert(week4.end);
  }
  if (select.value == "第五周") {
    // alert(5);
    start.value = dateConvert(week5.start);
    end.value = dateConvert(week5.end);
  }
}
var select;
function judge(date) {
  // //console.log(week1);
  //console.log(date);
  select = document.getElementById("week");
  var start1 = new Date(week1.start);
  var start2 = new Date(week2.start);
  var start3 = new Date(week3.start);
  var start4 = new Date(week4.start);
  var start5 = new Date(week5.start);
  // //console.log(week1.start);
  if (date > start1) select.value = "第一周";
  if (date > start2) select.value = "第二周";
  if (date > start3) select.value = "第三周";
  if (date > start4) select.value = "第四周";
  if (date > start5) select.value = "第五周";
}

同时里面有一个日期格式自行拼接的函数,代码如下

function dateConvert(dateParms) {
  // 对传入的时间参数进行判断
  if (dateParms instanceof Date) {
    var datetime = dateParms;
  }
  //判断是否为字符串
  if (typeof dateParms == "string" && dateParms.constructor == String) {
    //将字符串日期转换为日期格式
    var datetime = new Date(Date.parse(dateParms.replace(/-/g, "/")));
  }
  //获取年月日时分秒
  var year = datetime.getFullYear();
  //注意加一
  var month = datetime.getMonth() + 1;
  var date = datetime.getDate();
  var hour = datetime.getHours();
  // 可预留//是否需要分秒
  var minutes = datetime.getMinutes();
  var second = datetime.getSeconds();
  //是否需要补0
  //月,日小于10时,补0
  if (month < 10) {
    month = "0" + month;
  }
  if (date < 10) {
    date = "0" + date;
  }
  //拼接自己想要的日期格式
  var time = year + "-" + month + "-" + date;
  //返回处理结果
  return time;
}

代码有很多冗余的地方,优化一下效果更好

猜你喜欢

转载自blog.csdn.net/LMlikoSakura/article/details/82881183