时间格式化-各种格式封装

在工作期间遇到了很多中时间格式化的需求,于是收集了很多种方法,做一下学习笔记以备需要
方法如下:

// 封装方法1********************可在全局中注册全局过滤器

// 封装时间格式化方法--过滤fitters
function formatTimeStamp(timestamp) {
	if (!timestamp) return ''
	const day = new Date(timestamp)
	let year = day.getFullYear()
	let month = day.getMonth() + 1
	let date = day.getMonth()
	return `${year}.${month}.${date}`;
}

/**
 * @author chuzhixin 1204505056@qq.com (不想保留author可删除)
 * @description 格式化时间周一到周日
 * @param time
 * @param cFormat
 * @returns {string|null}
 */
function parseTime(time, cFormat) {
	if (arguments.length === 0) {
		return null
	}
	const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
	let date
	if (typeof time === 'object') {
		date = time
	} else {
		if (typeof time === 'string' && /^[0-9]+$/.test(time)) {
			time = parseInt(time)
		}
		if (typeof time === 'number' && time.toString().length === 10) {
			time = time * 1000
		}
		date = new Date(time)
	}
	const formatObj = {
		y: date.getFullYear(),
		m: date.getMonth() + 1,
		d: date.getDate(),
		h: date.getHours(),
		i: date.getMinutes(),
		s: date.getSeconds(),
		a: date.getDay(),
	}
	const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
		let value = formatObj[key]
		if (key === 'a') {
			return ['日', '一', '二', '三', '四', '五', '六'][value]
		}
		if (result.length > 0 && value < 10) {
			value = '0' + value
		}
		return value || 0
	})
	return time_str
}


export default {
	formatTimeStamp,
	parseTime
}


// 封装方法2---——————————————————————————这样封装要在使用的vue文件中导出来用

/*
	在vue文件导出来中使用:
	import {formatTime,tenBitTimestamp} from "filters"
*/

/**
 * @author chuzhixin 1204505056@qq.com (不想保留author可删除)
 * @description 格式化时间
 * @param time
 * @param option
 * @returns {string}
 */
export function formatTime(time, option) {
	if (('' + time).length === 10) {
		time = parseInt(time) * 1000
	} else {
		time = +time
	}
	const d = new Date(time)
	const now = Date.now()

	const diff = (now - d) / 1000

	if (diff < 30) {
		return '刚刚'
	} else if (diff < 3600) {
		// less 1 hour
		return Math.ceil(diff / 60) + '分钟前'
	} else if (diff < 3600 * 24) {
		return Math.ceil(diff / 3600) + '小时前'
	} else if (diff < 3600 * 24 * 2) {
		return '1天前'
	}
	if (option) {
		return parseTime(time, option)
	} else {
		return (
			d.getMonth() +
			1 +
			'月' +
			d.getDate() +
			'日' +
			d.getHours() +
			'时' +
			d.getMinutes() +
			'分'
		)
	}
}



/**
 * @author chuzhixin 1204505056@qq.com (不想保留author可删除)
 * @description 10位时间戳转换
 * @param time
 * @returns {string}
 */
export function tenBitTimestamp(time) {
	if (time == 0 || time == null || time == '') {
		return ''
	}
	const date = new Date(time * 1000)
	const y = date.getFullYear()
	let m = date.getMonth() + 1
	m = m < 10 ? '' + m : m
	let d = date.getDate()
	d = d < 10 ? '' + d : d
	let h = date.getHours()
	h = h < 10 ? '0' + h : h
	let minute = date.getMinutes()
	let second = date.getSeconds()
	minute = minute < 10 ? '0' + minute : minute
	second = second < 10 ? '0' + second : second
	return y + '年' + m + '月' + d + '日 ' + h + ':' + minute + ':' + second //组合
}

/**
 * @author chuzhixin 1204505056@qq.com (不想保留author可删除)
 * @description 13位时间戳转换
 * @param time
 * @returns {string}
 */
export function thirteenBitTimestamp(time) {
	const date = new Date(time / 1)
	const y = date.getFullYear()
	let m = date.getMonth() + 1
	m = m < 10 ? '' + m : m
	let d = date.getDate()
	d = d < 10 ? '' + d : d
	let h = date.getHours()
	h = h < 10 ? '0' + h : h
	let minute = date.getMinutes()
	let second = date.getSeconds()
	minute = minute < 10 ? '0' + minute : minute
	second = second < 10 ? '0' + second : second
	return y + '年' + m + '月' + d + '日 ' + h + ':' + minute + ':' + second //组合
}

在vue中使用:
因为是需要时间过滤的,所以当作过滤器来使用,我一般喜欢在全局中注册过滤器,不喜欢分散,分散的时候管理不方便,所以选择的是:封装方法1
如果有需要封装各种方法的(不局限于时间格式处理)可以选择分散的,导出来就可以用了
1.在vue项目中的main.js文件引入,注册过滤器
例如:

import Vue from 'vue'
import App from './App'
import store from '@/store'
import filters from 'utils/filters.js' //时间格式处理的封装js

//全局注册组件(很多地方都需要用到)
import LoginPop from '@/pages/com_pop/login-pop.vue'
// console.log(filters)
Vue.component('LoginPop', LoginPop);


/**
 * Vue.filter(过滤器名称,js函数function)
 **/

//全局注册过滤器(用Object.keys(filters).forEach()方法不需要一个一个注册那么麻烦,但必须是第一种封装的导出方法)
Object.keys(filters).forEach(filter=>{
	Vue.filter(filter,filters[filter])
})


//如果一个一个注册的话==》 过滤器名称,js函数
Vue.filter('capitalize', function (value) {
  if (!value) return ''
  value = value.toString()
  return value.charAt(0).toUpperCase() + value.slice(1)
})



Vue.config.productionTip = false
//、、、

2.在页面需要过滤器的地方使用:

<!-- 在双花括号中 -->
<div>时间格式:{{ time | formatTimeStamp}}</div>

额外获得知识点:

Object.keys(filters).forEach( ()=>{
})

详解:
遍历对象数组结合的方法Object.keys(filters).forEach
Object.keys()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值