日期时间格式化与设置默认日期为当前的前X天(setDate、getDate等方法)

在项目中时间处理必不可少,对于后端管理等系统表格可能会展示时间或通过时间查询数据,这些都需要进行时间处理。

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。

代码略显冗余,请谅解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端绘梦师

你的鼓励是我最大的动力!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值