前端常用处理时间方法

项目上用到很多时间格式,写了一些处理时间的方法,也可以用第三方库,下面是我自己项目封装的一下方法,命名瞎写的,有些方法是关联的,很多没有怎么完善,记录一下,兼容ios时间问题,时间太赶没有完善,将就用下,人和程序有一个人跑就行

1fd3ec0d789208d117276c90c2316852aca46382.gif

获取当前时间戳 getTodayTomorrowTtem

export const getTodayTomorrowTtem = () => {
	return store.getters.serverTime || new Date().getTime()
}

YY-MM-DD 转时间戳 如果已经是时间戳则不操作 getTimeStamp

export const getTimeStamp = date => {
	if (!date) return ''
	if (typeof date === 'string') {
		date = date.replace(/-/g, '/')
	}
	return Date.parse(new Date(date))
}

时间戳 转 YY-MM-DD getDateFormats

export const getDateFormats = (date, format = 'YY-MM-DD') => {
	if (!date) return false
	if (typeof date === 'string') {
		date = date.replace(/-/g, '/')
	}
	return getDateFormat(new Date(date), format)
}

中国标准时间 转 YY-MM-DD getDateFormat

  • 示例:Wed Jan 04 2023 16:17:30 GMT+0800 (中国标准时间)

export const getDateFormat = (date, format = 'YY-MM-DD') => {
	let YY = date.getFullYear() + '-'
	let month = date.getMonth() + 1
	let day = date.getDate()
	let MM = month < 10 ? '0' + month + '-' : month + '-'
	let DD = day < 10 ? '0' + day : day + ''
	if (format === 'YY-MM-DD') return YY + MM + DD
	if (format === 'MM-DD') return MM + DD
	if (format === 'DD') return DD
}

转换时间格式 dateFormats

  • 示例: 2022-12-12 => 2022.12.12 或 2022-12-12 12:12:59 => 2022.12.12 12:12:59

export const dateFormats = item => {
	if (!item) return
	let date = item.split(' ')
	let createTime = date[0].replace(/-/g, '/')
	let arr = createTime.split('/')
	let i = ''
	if (date[1]) {
		i = ' ' + date[1]
	}
	return arr[0] + '.' + parseInt(Number(arr[1])) + '.' + parseInt(Number(arr[2])) + i
}

2022-12-12 转年月日多格式 getYearMonthDay


export const getYearMonthDay = (date, format) => {
	if (!date) return false
	if (typeof date === 'string') {
		date = date.replace(/-/g, '/')
	}
	return getSpecificDate(new Date(date), format)
}

中国标准时间 转年月日多格式 getSpecificDate


export const getSpecificDate = (date, format = 'YY-MM-DD') => {
	let YY = date.getFullYear() + '年'
	let MM = date.getMonth() + 1 + '月'
	let DD = date.getDate() + '日'
	if (format === 'YY-MM-DD') return YY + MM + DD
	if (format === 'MM-DD') return MM + DD
	if (format === 'DD') return DD
	if (format === 'HH:mm') return DD
	if (format === 'YY.MM.DD')
		return date.getFullYear() + '.' + (date.getMonth() + 1) + '.' + date.getDate()
}

处理时间 handleTime

  • 示例: 2023-01-04 = 周三

export const handleTime = item => {
	if (!item) return
	let createTime = item.replace(/-/g, '/')
	return week[new Date(createTime).getDay()]
}

中国标准时间 获取星期几 getWeek


const week = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']

export const getWeek = date => {
	return week[date.getDay()]
}

检测活动是否开始 checkTimeStatus

// 检测状态 0 还未开始 1 活动期间 2 结束
export const checkTimeStatus = function(beginTime, endTime, systemTime) {
	let start = getTimeStamp(beginTime)  //开始时间
	let end = getTimeStamp(endTime) //结束时间
	let now = getTimeStamp(systemTime || getTodayTomorrowTtem()) //不传默认取当前时间
        
	// 不配置
	if (!start && !end) {
		return 1
	}
	// 开始日期无
	if (!start && end) {
		return now <= end ? 1 : 2
	}

	// 结束日期无
	if (start && !end) {
		return now >= start ? 1 : 0
	}

	if (now < start) {
		// 未开始
		return 0
	} else if (now > end) {
		// 结束
		return 2
	} else {
		// 活动中
		return 1
	}
}

计算剩余小时和分钟 getTimeRemainings

export const getTimeRemainings = (item, num = 30) => {
	if (!item) return ''
	let date = getTimeStamp(item) + 60 * num * 1000 - getTodayTomorrowTtem()
	if (date < 0) return '1分钟'
	let H = parseInt(date / 1000 / 60 / 60) // 小时
	let H1 = date % (1000 * 60 * 60)
	let minute = parseInt(H1 / 1000 / 60) // 剩余分钟
	return H > 0 ? H + '小时' + minute + '分钟' : minute + '分钟'
}

计算剩余分钟 getTimeRemaining

export const getTimeRemaining = (item, text = true, num = 30) => {
	if (!item) return ''
	let date = getTimeStamp(item) + 60 * num * 1000 - getTodayTomorrowTtem()
	if (date < 0) return text ? '1分钟' : 0
	let minute = Math.ceil(date / 1000 / 60) 
	return (minute > num ? num : minute) + (text ? '分钟' : 0)
}

计算开始时间和结束时间相隔几个晚上 getCalculationDate

export const getCalculationDate = (startDate, endDate) => {
	let dete = getTimeStamp(endDate) - getTimeStamp(startDate)
	return Math.trunc(dete / 1000 / 60 / 60 / 24)
}

日期取整 deleteDate

  • 2022-06-06 12:12:36 => 2022-06-06
export const deleteDate = date => {
	return date.split(' ')[0]
}

活动倒计时 deleteDate


// 格式化时间
export const formatTime = (seconds, showDays, valueFun) => {
	// 小于等于0的话,结束倒计时
	seconds <= 0 && end()
	let [day, hour, minute, second] = [0, 0, 0, 0]
	day = parseInt(seconds / (60 * 60 * 24 * 1000))
	hour = parseInt((seconds - day * 60 * 60 * 24 * 1000) / (60 * 60 * 1000))

	let showHour = null
	if (showDays) {
		showHour = hour
	} else {
		// 如果不显示天数,将“天”部分的时间折算到小时中去
		showHour = parseInt(seconds / (60 * 60 * 1000))
	}
	minute = parseInt((seconds - day * 60 * 60 * 24 * 1000 - hour * 60 * 60 * 1000) / (60 * 1000)) // 剩余分钟
	second = parseInt(
		(seconds - day * 60 * 60 * 24 * 1000 - hour * 60 * 60 * 1000 - minute * 60 * 1000) / 1000
	)
	// 如果小于10,在前面补上一个"0"
	showHour = showHour < 10 ? '0' + showHour : showHour
	minute = minute < 10 ? '0' + minute : minute
	second = second < 10 ? '0' + second : second
	day = day < 10 ? '0' + day : day
	valueFun([day, showHour, minute, second])
}
var timer = null
// 倒计时
export const start = query => {
	let { endTime, showDays = true, valueFun } = query
	// 避免可能出现的倒计时重叠情况
	let date = getTimeStamp(endTime) - getTodayTomorrowTtem()
	clearTimer()
	console.log(date, getTimeStamp(endTime), getTodayTomorrowTtem())
	if (date <= 0) {
		valueFun(['00', '00', '00', '00'])
		return
	}
	date = Number(date)
	formatTime(date, showDays, valueFun)
	timer = setInterval(() => {
		date -= 1000
		// 发出change事件
		if (date <= 0) {
			clearInterval(timer)
			return end()
		}
		formatTime(date, showDays, valueFun)
	}, 1000)
}

// 停止倒计时
export const end = () => {
	clearTimer()
}
// 清除定时器
export const clearTimer = () => {
	console.log('清除定时器', timer)
	if (timer) {
		// 清除定时器
		clearInterval(timer)
		timer = null
	}
}

小白一个,学不动就回家养猪

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript前端对于大量数据的展示方式和处理方法有很多种。 首先,对于数据的展示方式,常用方法包括分页、滚动加载和虚拟滚动。分页是将数据分成多个页面进行展示,用户可以点击页码来切换页面查看数据。滚动加载是在页面滚动到底部时自动加载更多数据,实现无限滚动效果。虚拟滚动是仅渲染可见区域的数据,随着用户滚动页面,只渲染需要展示的数据,减少渲染时间和内存消耗。 其次,对于大量数据的处理方法常用方法包括数据分片和异步加载。数据分片是将大量数据分成小块进行处理,可以通过分页或者固定大小的数据块来实现。异步加载是指在请求数据时采用异步的方式,不阻塞页面加载和渲染,使得用户可以先看到页面的部分内容,然后再加载和展示数据。 另外,为了提高数据的展示性能,还可以使用数据缓存和数据压缩等方法。数据缓存是将数据保存在内存或者本地存储中,减少网络请求,提高页面加载速度。数据压缩是将数据进行压缩,减少数据的大小,从而减少网络传输时间和减轻服务器负担。 最后,可以通过数据可视化技术将大量数据以图表、表格等方式呈现,提升用户对数据的理解和分析能力。常用的数据可视化库有Chart.js、ECharts等。 综上所述,JavaScript前端对于大量数据的展示方式和处理方法有多种选择,开发者可以根据具体需求选择适合的方法来展示和处理数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值