js日期格式化,日期时间计算整理
功能列表:
- 日期格式化
- 计算日期差值
- 计算日期+n天
- 计算日期+n月
- 计算日期+n年
- 获得本季度的开始月份
- 获得周一
- 获得周日
- 获得月初
- 获得月末
- 获得季度初
- 获得季度末
- 获得年初
- 获得年末
工具类:
class DateUtils {
static formatDate(date, formatter) {
if (!date) {
return ''
}
if (!(date instanceof Date)) {
date = new Date(date)
}
const y = date.getFullYear()
const m = `${date.getMonth() + 1}`.padStart(2, 0)
const d = `${date.getDate()}`.padStart(2, 0)
const hh = `${date.getHours()}`.padStart(2, 0)
const mm = `${date.getMinutes()}`.padStart(2, 0)
const ss = `${date.getSeconds()}`.padStart(2, 0)
const SSS = `${date.getMilliseconds()}`.padStart(3, 0)
if (formatter) {
return formatter
.replace('yyyy', y)
.replace('MM', m)
.replace('dd', d)
.replace('hh', hh)
.replace('mm', mm)
.replace('ss', ss)
.replace('SSS', SSS)
}
return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
}
static calculateDiffDate(startDate, endDate) {
if (!startDate || !endDate) return ''
if (!(startDate instanceof Date)) {
startDate = new Date(startDate)
}
if (!(endDate instanceof Date)) {
endDate = new Date(endDate)
}
const startTime = startDate.getTime()
const endTime = endDate.getTime()
const total = (endTime - startTime) / 1000
const day = parseInt(total / (24 * 60 * 60))
const afterDay = total - day * 24 * 60 * 60
const hour = parseInt(afterDay / (60 * 60))
const totalHour = total / (60 * 60)
const afterHour = total - day * 24 * 60 * 60 - hour * 60 * 60
const min = parseInt(afterHour / 60)
const totalMin = total / 60
const afterMin = total - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60
const result = {
day,
afterDay,
hour,
totalHour,
afterHour,
min,
totalMin,
afterMin
}
return result
}
static AddDays(day, n) {
if (!day) {
return ''
}
const t = new Date(day)
t.setDate(t.getDate() + n)
return t
}
static AddMonths(day, n) {
if (!day) {
return ''
}
const t = new Date(day)
const s = new Date(day)
t.setMonth(t.getMonth() + n)
if (t.getDate() !== s.getDate()) {
t.setDate(0)
}
return t
}
static AddYears(day, n) {
if (!day) {
return ''
}
const t = new Date(day)
const s = new Date(day)
t.setFullYear(t.getFullYear() + n)
if (t.getDate() !== s.getDate()) {
t.setDate(0)
}
return t
}
static getQuarterStartMonth(date) {
if (!date) {
return ''
}
const t = new Date(date)
const dateMonth = t.getMonth()
if (dateMonth <= 2) {
return 0
}
if (dateMonth <= 5) {
return 3
}
if (dateMonth <= 8) {
return 6
}
return 9
}
static getWeekStartDate(date) {
if (!date) {
return ''
}
const t = new Date(date)
const dateDayOfWeek = t.getDay() === 0 ? 6 : t.getDay() - 1
return DateUtils.AddDays(date, -dateDayOfWeek)
}
static getWeekEndDate(date) {
return DateUtils.AddDays(DateUtils.getWeekStartDate(date), 6)
}
static getMonthStartDate(date) {
if (!date) {
return ''
}
const t = new Date(date)
const dateYear = t.getFullYear()
const dateMonth = t.getMonth()
return new Date(dateYear, dateMonth, 1)
}
static getMonthEndDate(date) {
return DateUtils.AddDays(DateUtils.AddMonths(DateUtils.getMonthStartDate(date), 1), -1)
}
static getQuarterStartDate(date) {
if (!date) {
return ''
}
const t = new Date(date)
const dateYear = t.getFullYear()
return new Date(dateYear, DateUtils.getQuarterStartMonth(date), 1)
}
static getQuarterEndDate(date) {
return DateUtils.AddDays(DateUtils.AddMonths(DateUtils.getQuarterStartDate(date), 3), -1)
}
static getYearDateStart(date) {
if (!date) {
return ''
}
const t = new Date(date)
const dateYear = t.getFullYear()
return new Date(dateYear, 0, 1)
}
static getYearDateEnd(date) {
if (!date) {
return ''
}
const t = new Date(date)
const dateYear = t.getFullYear()
return new Date(dateYear, 11, 31)
}
}
export default DateUtils