日期方法封装

// 定义补零
function zeroFill(n) {
  return n < 10 ? "0" + n : n
}

// 时间格式化(处理后端传过来的格式时间)// 2023-10-24T09:05:26.000+08:00
export const handleDateFormat = (date) => {
	if (date) {
	  let time = new Date(date)
	  let Year = time.getFullYear() // 年
	  let Month = zeroFill(time.getMonth() + 1) //月
	  let Day = zeroFill(time.getDate()) // 日
	  // let Week = time.getDay() // 周
	  let hour = zeroFill(time.getHours()) // 时
	  let minute = zeroFill(time.getMinutes()) // 分
	  let second = zeroFill(time.getSeconds()) // 秒
	  return Year + "-" + Month + "-" + Day + " " + hour + ":" + minute + ":" + second
	} else {
	  return ''
	}
}

// 获取本地时间
export const useTime = () => {
  let year = 0 // 年份
  let month = 0 // 月份
  let week = '' // 星期几
  let day = 0 // 天数
  let hour = 0 // 小时
  let minute = 0 // 分钟
  let second = 0 // 秒
  let nowTime = '' // 当前时间

  // 更新时间
  const updateTime = () => {
    const date = new Date()
    year = date.getFullYear()
    month = date.getMonth() + 1
    month >= 1 && month <= 9 ? (month = '0' + month) : ''
    week = '日一二三四五六'.charAt(date.getDay())
    day = date.getDate()
    day >= 0 && day <= 9 ? (day = '0' + day) : ''
    hour =
      (date.getHours() + '')?.padStart(2, '0') ||
      new Intl.NumberFormat(undefined, { minimumIntegerDigits: 2 }).format(
        date.getHours()
      )
    minute =
      (date.getMinutes() + '')?.padStart(2, '0') ||
      new Intl.NumberFormat(undefined, { minimumIntegerDigits: 2 }).format(
        date.getMinutes()
      )
    second =
      (date.getSeconds() + '')?.padStart(2, '0') ||
      new Intl.NumberFormat(undefined, { minimumIntegerDigits: 2 }).format(
        date.getSeconds()
      )
    nowTime = `${year}年${month}月${day} ${hour}:${minute}:${second}`
  }

  updateTime()

  return { year, month, day, hour, minute, second, week, nowTime }
}

// 获取当前时间
export const getCurrentDate = () => {
  let date = new Date()
  let year = date.getFullYear()
  let month = date.getMonth() + 1
  let day = date.getDate()
  let hour = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
  let minute =
    date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
  let second =
    date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
  month >= 1 && month <= 9 ? (month = '0' + month) : ''
  day >= 0 && day <= 9 ? (day = '0' + day) : ''
  return (
    year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second
  )
}

// 获取当前月份的第一天 new Date('2023/10/10') // 用-的话ios兼容有问题  需要/
export function getStartTime(params) {
	let str = params
	if(params.indexOf('-') > 0){
		str = params.replace(/-/g,"/")
	}
	let date = new Date(str)
	date.setDate(1) // 将当前时间的日期设置成第一天
	let year = date.getFullYear() // 得到当前年份 
	let month = date.getMonth() + 1 // 得到当前月份(0-11月份,+1是当前月份)
	month = month >= 10 ? month : '0' + month // 补零
	let day = date.getDate() // 得到当前天数,实际是本月第一天,因为前面setDate(1) 设置过了
	// console.log(month) 03
	return year + '-' + month + '-' + day
};

// 获取当前月份的最后一天
export function getEndTime(params) {
	let str = params
	if(params.indexOf('-') > 0){
		str = params.replace(/-/g,"/")
	}
	let date = new Date(str)
	let year = date.getFullYear()
	let month = date.getMonth() + 1
	month = month >= 10 ? month : '0' + month // 补零
	// 这里传入的是整数时间,返回的是下个月的第一天,因为月份是0-11
	let nextMonthFirthDay = new Date(year, month, 1) // 下个月的第一天
	// console.log(nextMonthFirthDay)
	let oneDay = 1000 * 60 * 60 * 24 // 一天的时间毫秒数
	let endDay = new Date(nextMonthFirthDay - oneDay)
	let day = endDay.getDate() // 本月最后一天
	// 这里传入的是字符串格式的时间,返回的是传入字符串的时间
	return year + '-' + month + '-' + day
}


// 获取年份
export const getYearArr = () => {
  let date = new Date()
  let year = date.getFullYear()
  let arr = []
  for (var i = 0; i < 8; i++) {
    let val = year - i + '年'
    arr.push({
      label: val,
      value: year - i,
    })
  }
  return arr
}

// 获取月份
export const getMonthArr = () => {
  let arr = []
  for (var i = 0; i < 12; i++) {
    let val = i + 1 + '月'
    arr.push({
      label: val,
      value: i + 1,
    })
  }
  return arr
}
// 获取日期
export const getDayArr = (y,m) => {
  let year = y ? y : new Date().getFullYear()
  let month = m ? m : (new Date().getMonth() + 1)
	let date = new Date(year,month,0)
	let day = date.getDate() // 本月最后一天
	let arr = []
	for (var i = 0; i < day; i++) {
		let val = (i + 1) + '日'
		arr.push({
      label: val,
      value: i + 1
    })
	}
	arr.unshift({
    label: "全部",
    value: 0
  })
	return arr
}

// 获取一年周数
export const getWeekArr = (params) => {
  let year = params ? params : new Date().getFullYear()
  let start = new Date(year, 0, 1)
  let end = new Date(year, 12, 1)
  let oneDay = 1000 * 60 * 60 * 24 // 一天的时间毫秒数
  let endDay = new Date(end - oneDay)
  let days = Math.floor((endDay.getTime() - start.getTime()) / oneDay) // 2023 364天
  let weekDay = Math.ceil(days / 7)
  // console.log(weekDay) // 2023 52周
  let arr = []
  for (var i = 0; i < weekDay; i++) {
    let val = '第' + (i + 1) + '周'
    arr.push({
      label: val,
      value: i + 1,
    })
  }
  return arr
}

// 获取年今天周数
export const getWeekDays = () => {
  let year = new Date().getFullYear()
  let start = new Date(year, 0, 1)
  let oneDay = 1000 * 60 * 60 * 24 // 一天的时间毫秒数
  let days = Math.floor((new Date().getTime() - start.getTime()) / oneDay)
  let weekDay = Math.ceil(days / 7)
  // console.log(weekDay) // 2023-11-8 45周
  return weekDay
}

// 获取选择月周数
export const getMonthWeekArr = (year, month) => {
  let start = new Date(year, month - 1, 1)
  let nextMonthFirthDay = new Date(year, month, 1)
  let oneDay = 1000 * 60 * 60 * 24 // 一天的时间毫秒数
  let endDay = new Date(nextMonthFirthDay - oneDay) // 本月最后一天
  let days = Math.floor((endDay.getTime() - start.getTime()) / oneDay)
  let weekDay = Math.ceil(days / 7)
  let arr = []
  for (var i = 0; i < weekDay; i++) {
    let val = '第' + (i + 1) + '周'
    arr.push({
      label: val,
      value: i + 1,
    })
  }
  return arr
}

// 获取当天选择月周数
export const getMonthWeekDays = () => {
  let year = new Date().getFullYear()
  let month = new Date().getMonth()
  let start = new Date(year, month, 1)
  let oneDay = 1000 * 60 * 60 * 24 // 一天的时间毫秒数
  let days = Math.floor((new Date().getTime() - start.getTime()) / oneDay)
  let weekDay = Math.ceil(days / 7)
  // console.log(weekDay) // 2023-11-8 45周
  return weekDay
}

// 获取选择月周数的时间范围
export const getMonthWeekDate = (year, month, week) => {
  let start = new Date(year, month - 1, 1)
  let oneDay = 1000 * 60 * 60 * 24 // 一天的时间毫秒数
  // 一周7天[查到月份区间]
  let searchDay = start.getTime() + oneDay * 7 * (week - 1)
  let weekDay = new Date(searchDay).getDay()
  // 获取周一日期
  let first = searchDay - (weekDay - 1) * oneDay
  let firstDay = dateformat(new Date(first))
  let lastDay = dateformat(new Date(first + oneDay * 6))
  return [firstDay, lastDay]
}

function dateformat(date) {
  return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate()
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值