在项目中时间处理必不可少,对于后端管理等系统表格可能会展示时间或通过时间查询数据,这些都需要进行时间处理。
1.时间格式化处理
简单时间格式化代码如下:
// 时间格式化处理函数
const dealDate = function(d) {
var chinaStandard = d;
var date = new Date(chinaStandard);
var y = date.getFullYear();
var m = date.getMonth() + 1;
m = m < 10 ? "0" + m : m;
var d = date.getDate();
d = d < 10 ? "0" + d : d;
var h = date.getHours();
h = h < 10 ? "0" + h : h;
var minute = date.getMinutes();
minute = minute < 10 ? "0" + minute : minute;
var seconds = date.getSeconds();
seconds = seconds < 10 ? "0" + seconds : seconds;
let time = y + "-" + m + "-" + d + " " + h + ":" + minute + ":" + seconds;
return time;
}
// 使用padStart补0
function formatDate(date) {
let year = date.getFullYear();
let month = String(date.getMonth() + 1).padStart(2, '0');
let day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
这个函数的目的是将输入的日期时间格式化为一个标准的、易于阅读的字符串格式,包括年、月、日、时、分、秒,且月份、日期、小时、分钟和秒如果小于10,则会在前面补零,如:2024-07-25 17:00:00。
(1)创建 Date
对象
使用 new Date()
创建一个 Date
对象。
(2)提取年、月、日
通过 getFullYear()
, getMonth()
, getDate()
方法从 Date
对象中提取出年(y
)、月(m
)、日(d
)的值。注意,getMonth()
方法返回的月份是从0开始计数的,因此需要加1以得到常规意义上的月份。
(3)格式化月份、日期
对于月份(m
)和日期(d
),如果它们的值小于10,则在前面添加一个“0”,以确保格式的一致性。例如,将“3”格式化为“03”。
(4)提取并格式化小时、分钟、秒
通过 getHours()
, getMinutes()
, getSeconds()
方法从 Date
对象中提取出小时(h
)、分钟(minute
)、秒(seconds
)的值。
(5)拼接并返回格式化后的日期时间字符串
最后,使用模板字符串(或字符串连接)将年、月、日、时、分、秒拼接成一个完整的字符串,并以 "年-月-日 时:分:秒"
的格式返回。
2.设置默认时间为当前时间前的X天时间间隔
计算X天前的日期
要计算当前时间前的X天,通过修改Date
对象的日期部分来实现。JavaScript中的Date
对象提供了getDate()
方法来获取当前日期(日),以及setDate()
方法来设置新的日期(日)。
function getDateXDaysAgo(x) {
let date = new Date();
date.setDate(date.getDate() - x);
return date;
}
let xDaysAgo = getDateXDaysAgo(10); // 计算10天前的日期
3.总结
将以上步骤合并到一个示例中:
function getDateXDaysAgo(x) {
let date = new Date();
date.setDate(date.getDate() - x);
return date;
}
function formatDate(date) {
let year = date.getFullYear();
let month = String(date.getMonth() + 1).padStart(2, '0');
let day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
let xDaysAgo = getDateXDaysAgo(10);
let formattedDate = formatDate(xDaysAgo);
console.log(formattedDate); // 输出"2024-07-15" 的格式
实现根据表单中是否填写了时间来决定起始时间和结束时间的设置。如果未填写,就使用当前时间往前推90天的开始时间作为起始时间,当前时间的最后一秒作为结束时间。
replace()
方法用于在字符串中替换匹配到的子串。查找第一次出现的 '00:00:00'
子串,并将其替换为 '23:59:59'
。
Date
对象的 setHours()
方法用于设置日期对象的小时数、分钟数、秒数和毫秒数。setHours()
方法只接受最多四个参数,分别代表小时(0-23)、分钟(0-59)、秒(0-59)和毫秒(0-999)。
handlingTimeaAndName() {
let starTime = "";
let endTime = "";
if (this.formLabelAlign.warninggTime) {
if (this.formLabelAlign.warninggTime.length) {
starTime = dealDate(this.formLabelAlign.warninggTime[0]);
endTime = dealDate(this.formLabelAlign.warninggTime[1]);
endTime = endTime.replace('00:00:00','23:59:59')
}
} else {
// 当表单未填写时,默认为当前时间往前90天,时间为00:00:00
const currentTime = new Date();
const defaultTime = new Date(currentTime);
defaultTime.setDate(currentTime.getDate() - 90);
defaultTime.setHours(0, 0, 0);
starTime = dealDate(defaultTime);
endTime = dealDate(currentTime).replace('00:00:00', '23:59:59');
}
this.extra.startTime = starTime;
this.extra.endTime = endTime;
},
注意
- JavaScript的月份是从0开始的(即0代表1月,1代表2月,依此类推)。
- 使用
padStart()
方法可以确保月份和日期总是两位数,即使它们小于10。
代码略显冗余,请谅解!