Date/DateOperation.js

/**
 * 日期库操作
 *
 * @class DateOperation
 */
class DateOperation {
  constructor() {}

  /**
   * @description 打印开始点
   *
   * @memberof DateOperation
   */
  start() {
    console.log("日期库DateOperation start^_^_^_^_^_^_^_^_^_^")
  }

  /**
   * @description 打印结束点
   *
   * @memberof DateOperation
   */
  end() {
    console.log("日期库DateOperation end^_^_^_^_^_^_^_^_^_^")
  }

  /**
   * @description 获取当前时间戳
   *
   * @return {Number} 当前时间戳
   * @memberof DateOperation
   * @example
   * get_current_timestamp()    // 1630984496000
   */
  get_current_timestamp() {
    return Date.parse(new Date())
  }

  /**
   * @description 支持格式:"2019/10/24 08:00:00"、"2019-10-24 08:00:00"
   * @description 获取指定时间戳
   *
   * @param {String} str
   * @return {String}  时间戳
   * @memberof DateOperation
   * @example
   * get_appoint_timestamp("2019/10/24 08:00:00")  // 1571875200000
   * get_appoint_timestamp("2019-10-24 08:00:00")  // 1571875200000
   */
  get_appoint_timestamp(str) {
    return new Date(str).getTime()
  }

  /**
   * @description 判断一个时间是否在两个时间范围内,返回true或false
   *
   * @param {String} d1 时间范围1
   * @param {String} d2 时间范围2
   * @param {String} date 时间
   * @return {Boolean}
   * @memberof DateOperation
   * @example
   * nowInDateBetwen("2019-01-01","2019-02-02","2019-01-02")  // true
   */
  nowInDateBetwen(d1, d2, date) {
    //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了
    var dateBegin = new Date(d1.replace(/-/g, "/")) //将-转化为/,使用new Date
    var dateEnd = new Date(d2.replace(/-/g, "/")) //将-转化为/,使用new Date
    var dateNow = new Date(date.replace(/-/g, "/")) //将-转化为/,使用new Date
    //var dateBegin = new Date(d1);//将-转化为/,使用new Date
    //var dateEnd = new Date(d2);//将-转化为/,使用new Date
    //var dateNow = new Date();//获取当前时间

    var beginDiff = dateNow.getTime() - dateBegin.getTime() //时间差的毫秒数
    var beginDayDiff = Math.floor(beginDiff / (24 * 3600 * 1000)) //计算出相差天数

    var endDiff = dateEnd.getTime() - dateNow.getTime() //时间差的毫秒数
    var endDayDiff = Math.floor(endDiff / (24 * 3600 * 1000)) //计算出相差天数
    if (endDayDiff < 0) {
      //已过期
      return false
    }
    if (beginDayDiff < 0) {
      //没到开始时间
      return false
    }
    if (endDayDiff == 0) {
      return true
    }
    if (beginDayDiff == 0) {
      return true
    }
    return true
  }

  /**
   * @description 两个new Date()相减得到毫秒
   * @description 如何获得两个日期之间的差异(以天为单位)?
   *
   * @param {*} dateInitial 日期1
   * @param {*} dateFinal 日期2
   * @return {Number}  天数
   * @memberof DateOperation
   * @example
   * getDaysDiffBetweenDates(new Date('2017-12-13'), new Date('2017-12-22'))  // 9
   */
  getDaysDiffBetweenDates(dateInitial, dateFinal) {
    // console.log(dateFinal-dateInitial)
    return (dateFinal - dateInitial) / (1000 * 3600 * 24)
  }

  /**
   * @description 将指定格式的字符串解析为日期字符串
   *
   * @param {string} str "12-25-1995"
   * @param {string} [format='-']
   * @return {Date}  Mon Dec 25 1995 00:00:00 GMT+0800 (中国标准时间)
   * @memberof DateOperation
   * @example
   * dataPattern("12-25-1995")   // Mon Dec 25 1995 00:00:00 GMT+0800 (中国标准时间)
   */
  dataPattern(str, format = "-") {
    if (!str) {
      return new Date()
    }
    const dateReg = new RegExp(`^(\\d{2})${format}(\\d{2})${format}(\\d{4})$`)
    // console.log(dateReg.exec(str))
    // exec()接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回null.
    const [, month, day, year] = dateReg.exec(str)
    // console.log(`${month}, ${day} ${year}`)
    return new Date(`${month}, ${day} ${year}`)
  }

  /**
   * @description 从春节到当前日期总共过了多少天
   * @description 当前日期天数
   *
   * @param {Date} date
   * @return {Number}
   * @memberof DateOperation
   * @example
   * dayOfYear(new Date());    // 250  当前new Date是20210907
   */
  dayOfYear(date) {
    return Math.floor(
      (date - new Date(date.getFullYear(), 0, 0)) / 1000 / 60 / 60 / 24
    )
  }

  /**
   * @description 返回当前24小时制时间的字符串
   *
   * @param {*} date
   * @return {*}
   * @memberof DateOperation
   * @example
   * getColonTimeFromDate(new Date());    // 11:37:45
   */
  getColonTimeFromDate(date) {
    return date.toTimeString().slice(0, 8)
  }

  /**
   * @description 返回日期间的天数
   *
   * @param {Date} dateInitial
   * @param {Date} dateFinal
   * @return {Number}   两个日期之间的相差天数
   * @memberof DateOperation
   * @example
   * getDaysDiffBetweenDates(new Date('2019-01-01'), new Date('2019-10-14'));    // 286
   */
  getDaysDiffBetweenDates(dateInitial, dateFinal) {
    return (dateFinal - dateInitial) / (1000 * 3600 * 24)
  }

  /**
   * @description 检查是否在某日期 前 / 后
   *
   * @param {Date} dateA 目标日期A
   * @param {Date} dateB 目标日期B
   * @param {String} [bORa='b'] 在某日期 前(before) 还是 后(after) 
   * @return {Boolean} 
   * @memberof DateOperation
   * @example
   * isAfterDate(new Date(2010, 10, 21), new Date(2010, 10, 20), 'b');    // false
   * isAfterDate(new Date(2010, 10, 21), new Date(2010, 10, 20), 'a');    // true
   */
  isAfterDate(dateA, dateB, bORa = 'b') {
    return bORa === 'b'  ? dateA < dateB : dateA > dateB
  }

  /**
   * @description 获取明天的字符串格式时间
   *
   * @return {String} 明天日期 
   * @memberof DateOperation
   * @example
   * 今天是2021-09-07
   * 
   * tomorrow();    // 2021-09-08
   */
  tomorrow() {
    let t = new Date();
    t.setDate(t.getDate() + 1);
    return t.toISOString().split('T')[0];
  };
  
}

export default DateOperation