日期动态前后格式化处理
这篇文章主要介绍了一个JavaScript函数,用于根据给定的时间偏移量和格式化字符串来动态格式化日期时间,支持自定义时间格式和计算过去或未来的特定时间点。
js/**
根据给定的时间偏移量和格式化字符串格式化日期时间。
@param {Object} numAgo - 时间偏移量对象,包括以下属性:
years {number} 年数偏移量,默认为 0。
months {number} 月数偏移量,默认为 0。
days {number} 天数偏移量,默认为 0。
hours {number} 小时数偏移量,默认为 0。
minutes {number} 分钟数偏移量,默认为 0。
seconds {number} 秒数偏移量,默认为 0。
@param {string} format - 时间格式化字符串,默认为 '{y}-{m}-{d} {h}:{i}:{s}'。
可使用的占位符有:{y} 年、{m} 月、{d} 日、{h} 小时、{i} 分钟、{s} 秒、{w} 星期。
@param {Date} date - 基准日期时间,默认为当前时间。
@returns {string} 格式化后的日期时间字符串。
*/
function getFormattedDate(
numAgo = { years: 0, months: 0, days: 0, hours: 0, minutes: 0, seconds: 0 },
format = '{y}-{m}-{d} {h}:{i}:{s}',
date = new Date()
) {
// 根据 numAgo 修改时间
const {
years = 0,
months = 0,
days = 0,
hours = 0,
minutes = 0,
seconds = 0,
} = numAgo
date.setFullYear(date.getFullYear() - years)
date.setMonth(date.getMonth() - months)
date.setDate(date.getDate() - days)
date.setHours(date.getHours() - hours)
date.setMinutes(date.getMinutes() - minutes)
date.setSeconds(date.getSeconds() - seconds)
// 获取年、月、日、时、分、秒、星期
const [y, m, d, h, i, s] = [
date.getFullYear(),
date.getMonth() + 1,
date.getDate(),
date.getHours(),
date.getMinutes(),
date.getSeconds(),
]
const w = ['日', '一', '二', '三', '四', '五', '六'][date.getDay()]
// 格式化时间
const formattedDate = format
.replace(/\{y\}/g, y)
.replace(/\{m\}/g, m.toString().padStart(2, '0'))
.replace(/\{d\}/g, d.toString().padStart(2, '0'))
.replace(/\{h\}/g, h.toString().padStart(2, '0'))
.replace(/\{i\}/g, i.toString().padStart(2, '0'))
.replace(/\{s\}/g, s.toString().padStart(2, '0'))
.replace(/\{w\}/g, w)
return formattedDate
}
jsconst currentTime = getFormattedDate()
console.log(currentTime) // 输出如:2023-03-14 18:34:14
jsconst format = '{y}/{m}/{d} {h}:{i}:{s}'
const currentTime = getFormattedDate({}, format)
console.log(currentTime) // 输出如:2023/03/14 18:35:30
jsconst numAgo = { days: 1 }
const currentTime = getFormattedDate(numAgo)
console.log(currentTime) // 输出如:2023-03-13 18:35:51
jsconst numAgo = { days: 7 }
const format = '{y}/{m}/{d} {h}:{i}:{s}'
const currentTime = getFormattedDate(numAgo, format)
console.log(currentTime) // 输出如:2023/03/07 18:36:07
jsconst date = new Date('2022-02-02 12:00:00')
const currentTime = getFormattedDate({}, '{y}/{m}/{d} {h}:{i}:{s}', date)
console.log(currentTime) // 输出如:2022/02/02 12:00:00
jsconst date = new Date('2022-02-02 12:00:00')
const numAgo = { hours: 1 }
const currentTime = getFormattedDate(numAgo, '{y}-{m}-{d} {h}:{i}:{s}', date)
console.log(currentTime) // 输出如:2022-02-02 11:00:00
jsconst currentTime = getFormattedDate(
{ years: 1, months: 1, days: 1, hours: 1, minutes: 1, seconds: 1 },
'{y}-{m}-{d} {h}:{i}:{s}',
new Date('2022-03-14 17:37:00')
)
console.log(currentTime) // 输出如:2021-02-13 16:35:59
jsconst currentTime = getFormattedDate(
{ years: 1, months: 1, days: 1, hours: 1, minutes: 1, seconds: 1 },
'{y}-{m}-{d} {h}:{i}:{s}'
)
console.log(currentTime) // 输出如:2022-02-13 18:25:13
jsconst currentTime = getFormattedDate(
{ years: 1, months: 1, days: 1 },
'{y}-{m}-{d} 星期{w}'
)
console.log(currentTime) //输出如:2023-03-15 星期三
本文作者:liuxuechao
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!