JS时间类处理

/** * 针对时间的工具类 */
/**
 * 参数:
 * 1. date: 秒级时间;
 * 2. fmt:格式化的格式 'yyyy', 'yyyy-MM-dd', 'yy-MM-dd', 'yyyy-MM-dd hh:mm:ss', ...(按需求自己定义格式)
 *       fmt给一个默认参数
 * RegExp.$1是正则对象里的内置符号,表示与 regexp 中的第1子表达式相匹配的文本。$2、...、$99同理
 * 注意年份与其他时间区分开,因为年份正常的表达是4位,所以单独判断
 */
function formatDate(date, fmt = 'yyyy-MM-dd hh:mm:ss') {
  if (typeof date === 'string') {
    return date
  }
  date = new Date(date * 1000)
  var o = {
    'M+': date.getMonth() + 1, // 月份
    'd+': date.getDate(), // 日
    'h+': date.getHours(), // 时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
    'S': date.getMilliseconds() // 毫秒
  }

  if (!date || date == null) return null

  if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  for (var k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
    }
  }
  return fmt
}
/** *     * 获得当前时间     */
export function getCurrentDate() {
  return new Date()
}
/* 获得昨天时间 */
export function getYesterday() {
  const day = new Date()
  day.setDate(day.getDate() - 1)
  return day
}
/** *     * 获得本周起止时间     */
export function getCurrentWeek() {
  // 起止日期数组
  var startStop = new Array()
  // 获取当前时间
  var currentDate = getCurrentDate()
  // 返回date是一周中的某一天
  var week = currentDate.getDay()
  // 返回date是一个月中的某一天
  var month = currentDate.getDate()
  // 一天的毫秒数
  var millisecond = 1000 * 60 * 60 * 24
  // 减去的天数
  var minusDay = week != 0 ? week - 1 : 6
  // alert(minusDay);
  // 本周 周一
  var monday = new Date(currentDate.getTime() - (minusDay * millisecond))
  // 本周 周日
  var sunday = new Date(monday.getTime() + (6 * millisecond))
  // 添加本周时间
  startStop.push(monday) // 本周起始时间
  // 添加本周最后一天时间
  startStop.push(sunday) // 本周终止时间
  // 返回
  return startStop
}
/** *     * 获得本月的起止时间     */
export function getCurrentMonth() {
  // 起止日期数组
  var startStop = new Array()
  // 获取当前时间
  var currentDate = getCurrentDate()
  // 获得当前月份0-11
  var currentMonth = currentDate.getMonth()
  // 获得当前年份4位年
  var currentYear = currentDate.getFullYear()
  // 求出本月第一天
  var firstDay = new Date(currentYear, currentMonth, 1)
  // 当为12月的时候年份需要加1
  // 月份需要更新为0 也就是下一年的第一个月
  if (currentMonth == 11) {
    currentYear++
    currentMonth = 0 // 就为
  } else {
    // 否则只是月份增加,以便求的下一月的第一天
    currentMonth++
  }
  // 一天的毫秒数
  var millisecond = 1000 * 60 * 60 * 24
  // 下月的第一天
  var nextMonthDayOne = new Date(currentYear, currentMonth, 1)
  // 求出上月的最后一天
  var lastDay = new Date(nextMonthDayOne.getTime() - millisecond)
  // 添加至数组中返回
  startStop.push(firstDay)
  startStop.push(lastDay)
  // 返回
  return startStop
}
/**     * 得到本季度开始的月份     * @param month 需要计算的月份     ***/
export function getQuarterSeasonStartMonth(month) {
  var quarterMonthStart = 0
  var spring = 0 // 春
  var summer = 3 // 夏
  var fall = 6 // 秋
  var winter = 9 // 冬
  // 月份从0-11
  if (month < 3) {
    return spring
  }
  if (month < 6) {
    return summer
  }
  if (month < 9) {
    return fall
  }
  return winter
}
/**     * 获得该月的天数     * @param year年份     * @param month月份     * */
export function getMonthDays(year, month) {
  // 本月第一天 1-31
  var relativeDate = new Date(year, month, 1)
  // 获得当前月份0-11
  var relativeMonth = relativeDate.getMonth()
  // 获得当前年份4位年
  var relativeYear = relativeDate.getFullYear()
  // 当为12月的时候年份需要加1
  // 月份需要更新为0 也就是下一年的第一个月
  if (relativeMonth == 11) {
    relativeYear++
    relativeMonth = 0
  } else {
    // 否则只是月份增加,以便求的下一月的第一天
    relativeMonth++
  }
  // 一天的毫秒数
  var millisecond = 1000 * 60 * 60 * 24
  // 下月的第一天
  var nextMonthDayOne = new Date(relativeYear, relativeMonth, 1)
  // 返回得到上月的最后一天,也就是本月总天数
  return new Date(nextMonthDayOne.getTime() - millisecond).getDate()
}
/**     * 获得本季度的起止日期     */
export function getCurrentSeason() {
  // 起止日期数组
  var startStop = new Array()
  // 获取当前时间
  var currentDate = getCurrentDate()
  // 获得当前月份0-11
  var currentMonth = currentDate.getMonth()
  // 获得当前年份4位年
  var currentYear = currentDate.getFullYear()
  // 获得本季度开始月份
  var quarterSeasonStartMonth = getQuarterSeasonStartMonth(currentMonth)
  // 获得本季度结束月份
  var quarterSeasonEndMonth = quarterSeasonStartMonth + 2
  // 获得本季度开始的日期
  var quarterSeasonStartDate = new Date(currentYear, quarterSeasonStartMonth, 1)
  // 获得本季度结束的日期
  var quarterSeasonEndDate = new Date(currentYear, quarterSeasonEndMonth, getMonthDays(currentYear,
    quarterSeasonEndMonth))
  // 加入数组返回
  startStop.push(quarterSeasonStartDate)
  startStop.push(quarterSeasonEndDate)
  // 返回
  return startStop
}
/** *     * 得到本年的起止日期     *     */
export function getCurrentYear() {
  // 起止日期数组
  var startStop = new Array()
  // 获取当前时间
  var currentDate = getCurrentDate()
  // 获得当前年份4位年
  var currentYear = currentDate.getFullYear()
  // 本年第一天
  var currentYearFirstDate = new Date(currentYear, 0, 1)
  // 本年最后一天
  var currentYearLastDate = new Date(currentYear, 11, 31)
  // 添加至数组
  startStop.push(currentYearFirstDate)
  startStop.push(currentYearLastDate)
  // 返回
  return startStop
}
/**     * 返回上一个月的第一天Date类型     * @param year 年     * @param month 月     **/
export function getPriorMonthFirstDay(year, month) {
  // 年份为0代表,是本年的第一月,所以不能减
  if (month == 0) {
    month = 11
    // 月份为上年的最后月份
    year-- // 年份减1
    return new Date(year, month, 1)
  }
  // 否则,只减去月份
  month--
  return new Date(year, month, 1)
}
/**     * 获得上一月的起止日期     * ***/
export function getPreviousMonth() {
  // 起止日期数组
  var startStop = new Array()
  // 获取当前时间
  var currentDate = getCurrentDate()
  // 获得当前月份0-11
  var currentMonth = currentDate.getMonth()
  // 获得当前年份4位年
  var currentYear = currentDate.getFullYear()
  // 获得上一个月的第一天
  var priorMonthFirstDay = getPriorMonthFirstDay(currentYear, currentMonth)
  // 获得上一月的最后一天
  var priorMonthLastDay = new Date(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth(), getMonthDays(
    priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth()))
  // 添加至数组
  startStop.push(priorMonthFirstDay)
  startStop.push(priorMonthLastDay)
  // 返回
  return startStop
}
/**     * 获得上一周的起止日期     * **/
export function getPreviousWeek() {
  // 起止日期数组
  var startStop = new Array()
  // 获取当前时间
  var currentDate = getCurrentDate()
  // 返回date是一周中的某一天
  var week = currentDate.getDay()
  // 返回date是一个月中的某一天
  var month = currentDate.getDate()
  // 一天的毫秒数
  var millisecond = 1000 * 60 * 60 * 24
  // 减去的天数
  var minusDay = week != 0 ? week - 1 : 6
  // 获得当前周的第一天
  var currentWeekDayOne = new Date(currentDate.getTime() - (millisecond * minusDay))
  // 上周最后一天即本周开始的前一天
  var priorWeekLastDay = new Date(currentWeekDayOne.getTime() - millisecond)
  // 上周的第一天
  var priorWeekFirstDay = new Date(priorWeekLastDay.getTime() - (millisecond * 6))
  // 添加至数组
  startStop.push(priorWeekFirstDay)
  startStop.push(priorWeekLastDay)
  return startStop
}
/**     * 得到上季度的起始日期     * year 这个年应该是运算后得到的当前本季度的年份     * month 这个应该是运算后得到的当前季度的开始月份     * */
export function getPriorSeasonFirstDay(year, month) {
  var quarterMonthStart = 0
  var spring = 0 // 春
  var summer = 3 // 夏
  var fall = 6 // 秋
  var winter = 9 // 冬
  // 月份从0-11
  switch (month) { // 季度的其实月份
    case spring:
      // 如果是第一季度则应该到去年的冬季
      year--
      month = winter
      break
    case summer:
      month = spring
      break
    case fall:
      month = summer
      break
    case winter:
      month = fall
      break
  }
  return new Date(year, month, 1)
}
/**     * 得到上季度的起止日期     * **/
export function getPreviousSeason() {
  // 起止日期数组
  var startStop = new Array()
  var today = new Date()
  var dayMSec = 24 * 3600 * 1000
  // 得到上一个季度的第一天
  var lastQuarterFirstDay = new Date(today.getFullYear(), today.getMonth() - 4, 1)
  // 得到本月第一天
  var nowMonthFirstDay = new Date(today.getFullYear(), today.getMonth() - 1, 1)
  // 得到上一个季度的最后一天的毫秒值
  var lastQuarterLastDayMSec = nowMonthFirstDay.getTime() - 1 * dayMSec
  var lastQuarterLastDay = new Date(lastQuarterLastDayMSec)
  startStop.push(lastQuarterFirstDay)
  startStop.push(lastQuarterLastDay)
  return startStop
}
/**     * 得到去年的起止日期     * **/
export function getPreviousYear() {
  // 起止日期数组
  var startStop = new Array()
  // 获取当前时间
  var currentDate = getCurrentDate()
  // 获得当前年份4位年
  var currentYear = currentDate.getFullYear()
  currentYear--
  var priorYearFirstDay = new Date(currentYear, 0, 1)
  var priorYearLastDay = new Date(currentYear, 11, 1)
  // 添加至数组
  startStop.push(priorYearFirstDay)
  startStop.push(priorYearLastDay)
  return startStop
}


export const getDate = {
  today: function() {
    return [formatDate(getCurrentDate().getTime() / 1000, 'yyyy-MM-dd')]
  },
  month: function() {
    const current_month = getCurrentMonth().map(item => {
      return formatDate(item.getTime() / 1000, 'yyyy-MM-dd')
    })
    return current_month
  },
  yesterday: function() {
    return [formatDate(getYesterday().getTime() / 1000, 'yyyy-MM-dd')]
  },
  week: function() {
    const current_week = getCurrentWeek().map(item => {
      return formatDate(item.getTime() / 1000, 'yyyy-MM-dd')
    })
    return current_week
  },
  lastWeek: function() {
    const last_week = getPreviousWeek().map(item => {
      return formatDate(item.getTime() / 1000, 'yyyy-MM-dd')
    })
    return last_week
  },
  lastMonth: function() {
    const last_month = getPreviousMonth().map(item => {
      return formatDate(item.getTime() / 1000, 'yyyy-MM-dd')
    })
    return last_month
  },
  quarter: function() {
    const current_quarter = getCurrentSeason().map(item => {
      return formatDate(item.getTime() / 1000, 'yyyy-MM-dd')
    })
    return current_quarter
  },
  lastQuarter: function() {
    const last_quarter = getPreviousSeason().map(item => {
      return formatDate(item.getTime() / 1000, 'yyyy-MM-dd')
    })
    return last_quarter
  },
  year: function() {
    const current_year = getCurrentYear().map(item => {
      return formatDate(item.getTime() / 1000, 'yyyy-MM-dd')
    })
    return current_year
  },
  lastYear: function() {
    const last_year = getPreviousYear().map(item => {
      return formatDate(item.getTime() / 1000, 'yyyy-MM-dd')
    })
    return last_year
  }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值