前端js日期转换、比较、加减
直接上干货:
在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.substring(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 }
有人住高楼,有人处深沟。
有人光万丈,有人一生绣。
时光是匆匆,回首无旧梦。
人生若几何,凡尘事非多。
深情总遗却,妄自也洒脱。