在工作期间遇到了很多中时间格式化的需求,于是收集了很多种方法,做一下学习笔记以备需要
方法如下:
// 封装方法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( ()=>{
})