js日期实用工具函数

2020-04-05  本文已影响0人  小小少年小阿清

获取当前日期

// 获取当前日期
function getNowDate () {
  let date = new Date()
  let Y = date.getFullYear()
  let M = date.getMonth() + 1
  let D = date.getDate()
  M = M < 10 ? `0${M}` : M
  D = D < 10 ? `0${D}` : D
  return `${Y}-${M}-${D}`
}

获取当前日期前n个月

// 获取当前日期前n个月的日期
function getPreMonthDay (date, monthNum) {
  let dateArr = date.split('-')
  let year = dateArr[0] // 获取当前日期的年份
  let month = dateArr[1] // 获取当前日期的月份
  let day = dateArr[2] // 获取当前日期的日
  // let days = new Date(year, month, 0)
  // days = days.getDate() //获取当前日期中月的天数
  let year2 = year
  let month2 = parseInt(month) - monthNum
  if (month2 <= 0) {
    year2 =
      parseInt(year2) -
      parseInt(month2 / 12 === 0 ? 1 : Math.abs(parseInt(month2 / 12)) + 1)
    month2 = 12 - (Math.abs(month2) % 12)
  }
  let day2 = day
  let days2 = new Date(year2, month2, 0)
  days2 = days2.getDate()
  if (day2 > days2) {
    day2 = days2
  }
  if (month2 < 10) {
    month2 = '0' + month2
  }
  let t2 = year2 + '-' + month2 + '-' + day2
  return t2
}

判断是否为合法日期

/**
 * @method 判断是否为合法日期
 * @param date 为Date转化后的值
 */
function isValidDate (date) {
  return date instanceof Date && !isNaN(date.getTime())
}

判断一个时间是否位于两时间之间

/**
 * @method 判断一个时间是否位于两时间之间
 * @param sDate1,sDate2为日期,如:2019-01-01
 */
function dateBetweenJudget (startDate, endDate, date0) {
  let oStartDate = new Date(startDate)
  let oEndDate = new Date(endDate)
  let oDate0 = new Date(date0)
  if ((oEndDate.getTime() >= oDate0.getTime()) && (oStartDate.getTime() <= oDate0.getTime())) {
    return true
  }
  return false
}

比较两个日期的大小

/* @method 比较两个日期的大小
 * @param sDate1,sDate2为日期,如:2019-01-01
 */
function dateJudget (sDate1, sDate2) {
  var oDate1 = new Date(sDate1)
  var oDate2 = new Date(sDate2)
  if (oDate1.getTime() > oDate2.getTime()) {
    return false
  }
  return true
}

获取当前月份前n个月或者后n个月(返回日期列表)

/**
 * @method 获取当前月份前n个月或者后n个月
 * @param range 范围,before表示前n个月,after表示后n个月
 * @param date 特定的日期,如2019-01-01,若传‘’,默认为当前日期
 */
function getMonthRange (range, n, date = '') {
  var monthArr = []
  let data = (date === '') ? new Date() : new Date(date)
  if (range === 'before') {
    data.setMonth(data.getMonth() + 1, 1) // 获取到当前月份,设置月份
  } else {
    data.setMonth(data.getMonth() - 1, 1) // 获取到当前月份,设置月份
  }
  for (var i = 0; i < n; i++) {
    if (range === 'before') {
      data.setMonth(data.getMonth() - 1) // 每次循环一次 月份值减1
    } else {
      data.setMonth(data.getMonth() + 1) // 每次循环一次 月份值加1
    }
    let m = data.getMonth() + 1
    let m2 = m < 10 ? '0' + m : m
    let json = {
      yearAndMonth: data.getFullYear() + '-' + m2,
      month: m,
      year: data.getFullYear(),
    }
    monthArr.push(json)
  }
  return monthArr
}

获取某个月有多少天

/**
 * @method 获取某个月有多少天数
 * @param year 年
 * @param month 月(如:2)
 */
function getDaysInMonth (year, month) {
  return new Date(year, month, 0).getDate()
}

获取当前日期的前一个月

/**
 * @method 获取当前日期的前一个月
 */
function getPreMonthDate (times) {
  times = new Date(times)
  let Y = times.getFullYear()
  let M = times.getMonth() + 1
  const D = times.getDate()
  if (M === 1) {
    M = 12
    Y = Y - 1
  } else {
    M = M - 1
  }
  return `${Y}-${M}-${D}`
}

获取当前日期的前两个月

/**
 * @method 获取当前日期的前两个月
 */
function getPreMonthDate2 (times) {
  times = new Date(times)
  let Y = times.getFullYear()
  let M = times.getMonth() + 1
  const D = times.getDate()
  if (M === 2) {
    M = 12
    Y = Y - 1
  } else if (M === 1) {
    M = 11
    Y = Y - 1
  } else {
    M = M - 2
  }
  return `${Y}-${M}-${D}`
}

根据日期判断今天周几

/**
 * @method 根据日期判断今天周几
 * @param {*} date 日期格式为字符串2018-01-01
 */
function getDateWeek (date) {
  const weekDay = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
  const myDate = new Date(Date.parse(date))
  return weekDay[myDate.getDay()]
}

判断两个日期之间的天数差值

/**
 * @method 判断两个日期之间的天数差值
 * @param {*} endDate 结束天数 日期格式为字符串2018-01-01
 * @param {*} startDate 开始日期 日期格式为字符串2018-01-01
 */
function DateDifference (endDate, startDate) {
  return parseInt((Math.abs(new Date(endDate) - new Date(startDate)) / 1000 / 60 / 60 / 24) + 1)
}
上一篇下一篇

猜你喜欢

热点阅读