Javascript中日期操作总结

100 阅读2分钟

说在前面:最近工作中要求绘制日历,需要对日期做一些处理,下面是一些简单的处理方法,总结一下,顺便也分享给需要的人,如果有写的不好的或有问题的,欢迎留言或私信我指出;另外有一些日期处理的库Monentjsdayjs(github),大家也可以去看看。

1、指定日期是否是有效日期

/**
 * 指定日期是否是有效日期
 * @param dateSrc 日期源
 */
isDate(dateSrc) {
  return !!(dateSrc && new Date(dateSrc).toString() !== 'Invalid Date');
},

2.获取指定年份的天数

/**
 * 获取指定年份的天数
 * @param year 年份
 * @return {number}
 */
getDayCountOfYear(year) {
  // 是否是闰年
  const isLeapYear = year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0);
  return isLeapYear ? 366 : 365;
},

3、获取指定年指定月的天数

/**
 * 获取指定年指定月的天数
 * @param year 年份
 * @param month 月份
 * @return {number}
 */
getDayCountOfMonth(year, month) {
  if (month === 3 || month === 5 || month === 8 || month === 10) {
    return 30;
  }
  if (month === 1) {
    if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {
      return 29;
    }
    return 28;
  }
  return 31;
},

4、根据指定日期获取星期几

说明:方法中的isDate方法为第一点

/**
 * 根据指定日期获取星期几
 * @param dateSrc 日期源
 * @param hasWeek 是否带周字(0表不带,1表带)
 * @returns {string}
 */
getWeek(dateSrc, hasWeek) {
  hasWeek = hasWeek || 0;
  if (isDate(dateSrc)) {
    const date = new Date(dateSrc);
    const weekDay = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
    const weekNoDay = ['日', '一', '二', '三', '四', '五', '六'];
    return hasWeek === 1 ? weekDay[date.getDay()] : weekNoDay[date.getDay()];
  }
  return '';
},

5、获取指定日期前后nDay天的日期

/**
 * 获取指定日期前后nDay天的日期
 * @param dateStr 指定日期
 * @param nDay 前后nDay,正数代表往后,负数代表往前
 */
getDateStr(dateStr, nDay) {
  const currDate = new Date(dateStr);
  currDate.setDate(currDate.getDate() + nDay);// 获取AddDayCount天后的日期
  return new Date(currDate);
},

6、获取指定日期所在周的星期一

说明:方法中的isDate方法为第一点

/**
 * 获取指定日期所在周的星期一
 * @param dateSrc 指定日期
 */
getMonday(dateSrc) {
  if (isDate(dateSrc)) {
    const dateFormat = new Date(dateSrc);
    const week = dateFormat.getDay(); // 获取时间的星期数
    const minus = week ? week - 1 : 6;
    dateFormat.setDate(dateFormat.getDate() - minus); // 获取minus天前的日期
    return dateFormat;
  }
  return '';
},

7、获取指定日期所在周的星期日

说明:方法中的isDate方法为第一点

/**
 * 获取指定日期所在周的星期日
 * @param dateSrc 指定日期
 */
getSunday(dateSrc) {
  if (isDate(dateSrc)) {
    const dateFormat = new Date(dateSrc);
    const week = dateFormat.getDay(); // 获取时间的星期数
    const minus = week ? 7 - week : 0;
    dateFormat.setDate(dateFormat.getDate() + minus); // 获取minus天前的日期
    return dateFormat;
  }
  return '';
},

写在最后,持续更新中...