JavaScript实现日期智能格式化:显示今天、昨天或绝对日期
作者:橙子时间:2026-10-29 11:58:03浏览:235
本文介绍三种JavaScript实现日期格式化的方法,包括将原始时间转换为今天、昨天、前天等相对时间描述,以及计算指定天数后的日期。通过获取时间戳差值或修改Date对象时间,实现用户友好的时间显示效果,适用于社交动态、新闻列表等场景。
相对时间智能格式化实现
实现这一功能的方法非常直接,只需对时间数据进行简单的格式化处理即可。下面直接提供相关的代码实现。
function transDate() {
var $time =document.getElementById("share-time");
var date = $time.innerHTML.trim();
var tt = new Date(parseInt(date));
var days = parseInt((new Date().getTime() - date) / 86400000);
var today = new Date().getDate();
var year = tt.getFullYear();
var mouth = tt.getMonth() + 1;
var day = tt.getDate();
var time = tt.getHours() < 10 ? "0" + tt.getHours() : tt.getHours();
var min = tt.getMinutes() < 10 ? "0" + tt.getMinutes() : tt.getMinutes();
var result, offset;
offset = Math.abs(today - day);
if (days < 4&&offset<4) {
if (offset === 0) {
result = "今天" + time + ":" + min;
} else if (offset === 1) {
result = "昨天" + time + ":" + min;
} else if (offset === 2) {
result = "前天" + time + ":" + min;
}
} else {
result = year + "-" + mouth + "-" + day + " " + time + ":" + min;
}
$time.innerHTML = result;
}
transDate();
计算指定天数的日期函数
第一个函数用于获取今天、昨天或明天的具体日期信息。
function getDay(day){
var today = new Date()
// 获取时间戳(毫秒级)
/*
day为1,则是,明天的时间戳
day为-1,则是,昨天的时间戳
day为-2,则是,前天的时间戳
*/
var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day
// Date.setTime(时间戳):设置当前日期的时间
today.setTime(targetday_milliseconds)
console.log('today=', today) // today= Sun Mar 05 2023 16:14:56 GMT+0800 (中国标准时间)
var tYear = today.getFullYear() // 年
var tMonth = today.getMonth() // 月
var tDate = today.getDate() // 日
tMonth = this.doHandleMonth(tMonth + 1)
tDate = this.doHandleMonth(tDate)
console.log('返回年月日=', tYear + '-' + tMonth + '-' + tDate)
return tYear + '-' + tMonth + '-' + tDate
}
function doHandleMonth(month) {
var m = month
if (month.toString().length == 1) {
m = '0' + month
}
return m
}通用日期类型转换方法
第二个函数展示了如何根据指定类型(如昨天、今天、明天)获取对应的日期字符串。
/*
* @params date 日期
* @params type 日期 prev/current/next 昨天/今天/明天
* @params fmt 日期拼接符
*/
function getDays(date, type, fmt) {
let currentDate = new Date(date)
let y = currentDate.getFullYear()
let m = currentDate.getMonth() + 1
let d = currentDate.getDate()
function dateFormat(date, fmt) {
let y = new Date(date).getFullYear()
let m = new Date(date).getMonth() + 1
let d = new Date(date).getDate()
return `${y}${fmt}${m}${fmt}${d}`
}
switch (type) {
case "prev":
if (d - 1 < 1) {
if (m - 1 < 1) {
y = y - 1
m = 12
} else {
m = m - 1
}
d = new Date(y, m, 0).getDate()
} else {
d = d - 1
}
break
case "current":
break
case "next":
if (d + 1 > new Date(y, m, 0).getDate()) {
if (m + 1 > 12) {
y = y + 1
m = 1
d = 1
} else {
m = m + 1
d = 1
}
} else {
d = d + 1
}
break;
default:
break;
}
return dateFormat(new Date(`${y}-${m}-${d}`), fmt)
}
console.log(getDays(new Date('2023-5-13'), "prev", "-"));
console.log(getDays(new Date('2023-5-30'), "next", "-"));
console.log(getDays(new Date('2023-5-31'), "next", "-"));上述内容即为本文介绍的全部实现方式,希望这些代码示例能对大家有所帮助。
作者最新文章
JS脚本在App中运行报错怎么解决
2026-11-04 23:11:03
JS怎么使用padStart方法给数字补零
2026-11-04 11:12:03
JS是什么意思?JavaScript全称及基本定义
2026-11-04 08:05:29
JS 使用 toFixed(1) 保留一位小数的基本用法与注意事项
2026-11-03 18:34:57
JS字符串转整数:parseInt与Number的区别及用法
2026-11-03 17:26:54
