分享一些在vue项目中常用的日期和时间处理方法,快捷方便
好了,没有什么话术描述,直接上干货,觉得有用的小伙伴,请给予好评!谢谢啦
const format = {}
/** *
* 格式化日期为字符串
* formatString:格式化样式 参数格式要求:年:yyyy,月:MM ,日:dd,时:HH,分:mm,秒:ss,mims:毫秒
* */
format.convertDateToString = function (date, formatString) {
if (!date) {
return ''
}
if (!formatString || formatString.length < 1) {
formatString = 'yyyy-MM-dd'
}
if (date.getUTCHours() === date.getHours()) {
format.sumTimeHour(date, 8)
}
var year = date.getFullYear()
var month = date.getMonth() + 1
if (month < 10) {
month = '0' + month
}
var day = date.getDate()
if (day < 10) {
day = '0' + day
}
var hh = date.getHours()
if (hh < 10) {
hh = '0' + hh
}
var mi = date.getMinutes().toString()
if (mi < 10) {
mi = '0' + mi
}
var ss = date.getSeconds()
if (ss < 10) {
ss = '0' + ss
}
var miniSecond = date.getMilliseconds() // 0~999
if (miniSecond < 10) {
miniSecond = '00' + miniSecond
}
if (miniSecond < 100) {
miniSecond = '0' + miniSecond
}
var result = formatString
.replace('yyyy', year)
.replace('MM', month)
.replace('dd', day)
.replace('HH', hh)
.replace('mm', mi)
.replace('ss', ss)
.replace('mims', miniSecond)
return result
}
/** *
* 获取星期
* @params format:格式
* @params isnum:是否返回数字
* */
format.getSysWeek = function (format = '星期', isnum) {
const now = new Date().getDay()
return (
format + (isnum ? now : ['天', '一', '二', '三', '四', '五', '六'][now])
)
}
/** *
* 获取系统日期时间字符串
* formatter: yyyy-MM-dd HH:mm:ss/yyyy年MM月dd日 HH时mm分ss秒
* */
format.getSysDateString = function (formatter = 'yyyy-MM-dd HH:mm:ss') {
var now = new Date()
return format.convertDateToString(now, formatter)
}
/** *
* 将秒数转换为年月日时分秒格式 xxxx年xx月xx日xx时xx分xx秒
* */
format.getsecordToDate = function (value) {
// 年
var year = Math.floor(value / (12 * 30 * 24 * 60 * 60))
value = value % (12 * 30 * 24 * 60 * 60)
// 月
var month = Math.floor(value / (30 * 24 * 60 * 60))
value = value % (30 * 24 * 60 * 60)
// 日
var day = Math.floor(value / (24 * 60 * 60))
value = value % (24 * 60 * 60)
// 时
var hour = Math.floor(value / (60 * 60))
value = value % (60 * 60)
// 分
var mm = Math.floor(value / 60)
value = value % 60
// 秒
var ss = value
year = year > 0 ? year + '年' : ''
month = month > 0 ? month + '月' : ''
day = day > 0 ? day + '天' : ''
hour = hour > 0 ? hour + '时' : ''
mm = mm > 0 ? mm + '分' : ''
ss = ss > 0 ? ss + '秒' : ''
return year + month + day + hour + mm + ss
}
/**
* 转换时间戳为日期字符串
* */
format.JsonTimeToString = function (
jsonTime,
formatString = 'yyyy-MM-dd HH:mm:ss'
) {
var re = ''
if (jsonTime) {
try {
var date = new Date(parseInt(jsonTime))
re = format.convertDateToString(date, formatString)
} catch (e) {
// 日期无效
console.info(jsonTime + '日期无效')
}
}
return re
}
// 获取昨天 00:00:00 至 今天23:59:59日期
format.getTwodaysTime = function () {
var date = new Date()
var preDate = new Date(date.setDate(date.getDate() - 2))
preDate = format.convertDateToString(preDate, 'yyyy-MM-dd 00:00:00')
date = format.convertDateToString(new Date(), 'yyyy-MM-dd 23:59:59')
var times = [preDate, date]
return times
}
/** *
* 根据某日期获取间隔天数的日期
* @param {*时间} time, 默认当前日期
* */
format.getDateByDay = function (time, day = 0, defaultFormat = 'yyyy-MM-dd') {
const date = new Date()
// 日期数字
let dateNum = date.getDate()
if(time) dateNum = new Date(time).getDate()
return format.convertDateToString(date.setDate(dateNum + day), defaultFormat)
}
// 获取昨至今天的日期
format.getTwodaysDate = function () {
var date = new Date()
var preDate = new Date(date.setDate(date.getDate() - 1))
preDate = format.convertDateToString(preDate, 'yyyy-MM-dd')
date = format.convertDateToString(new Date(), 'yyyy-MM-dd')
var times = [preDate, date]
return times
}
// 获取最新一周的日期
format.getDefaultWorkDatetime = function (defaultFormat = 'yyyy-MM-dd') {
var date = new Date()
var preDate = new Date()
preDate.setDate(preDate.getDate() - 7)
preDate = format.convertDateToString(preDate, defaultFormat)
date = format.convertDateToString(date, defaultFormat)
var times = [preDate, date]
return times
}
// 获取当前月第一天和今天的日期
format.getMonthStartDatetime = function (defaultFormat = 'yyyy-MM-dd') {
var date = new Date()
var nowMonth = date.getMonth() // 当前月
var nowYear = date.getFullYear() // 当前年
var monthStartDate = new Date(nowYear, nowMonth, 1) // 本月开始的时间
var timeStar = format.convertDateToString(monthStartDate, defaultFormat)
date = format.convertDateToString(date, defaultFormat)
var times = [timeStar, date]
return times
}
/** *
* 获取某个日期或当前日期所在季度的第一天
* @param {*时间} time, 默认当前日期
* */
format.getSeasonDayOne = function (time) {
let date = new Date()
const month = time ? (new Date(time).getMonth() || date.getMonth()) : date.getMonth()
if (month < 3) {
date.setMonth(0)
} else if (month < 6) {
date.setMonth(3)
} else if (month < 9) {
date.setMonth(6)
} else if (month < 12) {
date.setMonth(9)
}
date.setDate(1)
return format.convertDateToString(date)
}
// 获取当前年第一天到今天
format.getYearStartDatetime = function (defaultFormat = 'yyyy-MM-dd') {
var date = new Date()
var nowYear = date.getFullYear() // 当前年
var timeStar = nowYear + '-01-01'
date = format.convertDateToString(date, defaultFormat)
var times = [timeStar, date]
return times
}
/** *
* 计算两个日期之间的历时
* @param starttime
* @param endtime
* @returns {string}
*/
format.getDatetimeLs = function (starttime, endtime) {
var dd = ''
var hh = ''
var mm = ''
var ss = ''
if (!endtime || endtime > new Date()) {
return '未结束'
}
if (!starttime) {
return ''
}
var mimis = (endtime - starttime) / 1000 // 秒
if (mimis > 24 * 60 * 60) {
// 大于1天,按照天计算
dd = Math.floor(mimis / (24 * 60 * 60))
mimis = mimis - dd * 24 * 60 * 60
dd += '天'
}
if (mimis > 60 * 60) {
// 大于1小时,按照小时计算
hh = Math.floor(mimis / (60 * 60))
mimis = mimis - hh * 60 * 60
hh += '时'
}
if (mimis > 60) {
// 大于1分钟,按照分钟计算
mm = Math.floor(mimis / 60)
mimis = mimis - mm * 60
mm += '分'
}
if (mimis > 0) {
// 剩余的秒
ss = mimis + '秒'
}
return dd + hh + mm + ss
}
…其他有几个复杂的日期操作,请看另一篇文章:复杂时间处理方法