直接上干货:
在utils目录下新建一个dateUtil.js,代码如下:(在需要用的地方引入这个js,调用相关方法传入对应参数就可以使用了)
该工具脚本,实用性很高,通用于各类前端项目,熟悉后亦可以自由扩展,使用中发现问题还请道友留言提示下,本人会同步更新:
// 日期转时间戳
const getUnixTime = (dateStr) => {
let newstr = dateStr.replace(/-/g, \'/\')
let date = new Date(newstr)
let time_str = date.getTime().toString()
return time_str.substr(0, 10)
}
// 时间戳转日期,falg:true表示只要年月日,part: year month date
const toDate = (number, flag, part) => {
let n = number
let date = new Date(parseInt(n) * 1000)
let y = date.getFullYear()
let m = date.getMonth() + 1
m = m < 10 ? (\'0\' + m) : m
let d = date.getDate()
d = d < 10 ? (\'0\' + 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
if (flag) {
if (part == \'year\') {
return y
} else if (part == \'month\') {
return m
} else if (part == \'date\') {
return n
}
return y + \'-\' + m + \'-\' + d
}
return y + \'-\' + m + \'-\' + d + \' \' + h + \':\' + minute + \':\' + second
}
// 判断两个日期时间戳相差多少天,参数为时间戳
const dateCompare = (dateTimeStamp1, dateTimeStamp2) => {
let dayNum = 0
if (dateTimeStamp1 > dateTimeStamp2) {
dayNum = Math.floor((dateTimeStamp1 - dateTimeStamp2) / 86400)
} else {
dayNum = Math.floor((dateTimeStamp2 - dateTimeStamp1) / 86400)
}
return dayNum
}
// 判断过去某个时间点到当前时间是否达到多少天,可以用来定期清理缓存
const datePassDays = (dateTimeStamp, days) => {
let now = getUnixTime(formatDateThis(new Date()))
let diffValue = now - dateTimeStamp
let limitTime = days * 86400
if (diffValue >= limitTime) {
return true
}
return false
}
// 当前日期加减天数,falg:true表示只要年月日
const mathChangeDate = (date, method, days, flag) => {
// method:\'+\' || \'-\'
// ios不解析带\'-\'的日期格式,要转成\'/\',不然Nan,切记
let dateVal = date.replace(/-/g, \'/\')
let timestamp = Date.parse(dateVal)
if (method == \'+\') {
timestamp = timestamp / 1000 + 24 * 60 * 60 * days
} else if (method == \'-\') {
timestamp = timestamp / 1000 - 24 * 60 * 60 * days
}
return toDate(timestamp, flag)
}
// 时间戳转换具体时间描述(传入数值型时间戳)
const getDateDiff = (dateTimeStamp) => {
let result = \'\'
let minute = 1 * 60
let hour = minute * 60
let day = hour * 24
let halfamonth = day * 15
let month = day * 30
let now = getUnixTime(formatDateThis(new Date())) // 有些特殊 不能使用 new Date()
let diffValue = now - dateTimeStamp
if (diffValue < 0) {
return
}
let monthC = diffValue / month
let weekC = diffValue / (7 * day)
let dayC = diffValue / day
let hourC = diffValue / hour
let minC = diffValue / minute
if (monthC >= 1) {
result = \'\' + parseInt(monthC) + \'月前\'
} else if (weekC >= 1) {
result = \'\' + parseInt(weekC) + \'周前\'
} else if (dayC >= 1) {
result = \'\' + parseInt(dayC) + \'天前\'
} else if (hourC >= 1) {
result = \'\' + parseInt(hourC) + \'小时前\'
} else if (minC >= 1) {
result = \'\' + parseInt(minC) + \'分钟前\'
} else { result = \'刚刚\' }
return result
}
// 获取当前年份,月份, 例: getCurrentTime("year")
const getCurrentTime = (method, date = new Date()) => {
if (method == \'year\') {
return date.getFullYear()
} else if (method == \'month\') {
return date.getMonth() + 1
}
return date
}
// 获取当前服务器时间,参数直接用 new Date() 就可以了
const formatDateThis = (date, lab = \'-\') => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
const hour = date.getHours()
const minute = date.getMinutes()
const second = date.getSeconds()
return [year, month, day].map(formatNumber).join(lab) + \' \' + [hour, minute, second].map(formatNumber).join(\':\')
}
// 当前年月日
const formatTime = (date, lab = \'-\') => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
return [year, month, day].map(formatNumber).join(lab)
}
// 当前时分秒
const formatTimes = time => {
const hour = time.getHours()
const minute = time.getMinutes()
const second = time.getSeconds()
return [hour, minute, second].map(formatNumber).join(\':\')
}
// 补0
const formatNumber = n => {
n = n.toString()
return n[1] ? n : \'0\' + n
}
// 比较两个时间大小(格式参考yyyy-mm-dd hh:mm:ss)
const compareTime = (startTime, endTime) => {
// 结束时间大于开始时间就是true , 反之则为 false
let sn = getUnixTime(startTime) * 1
let en = getUnixTime(endTime) * 1
if (en > sn) {
return true
}
return false
}
export {
dateCompare,
getCurrentTime,
getUnixTime,
formatDateThis,
formatTime,
formatTimes,
toDate,
getDateDiff,
mathChangeDate,
compareTime,
datePassDays
}