JavaScript Date(日期) 对象
今天我们重点学习JavaScript中的Date对象。
Date对象用于处理日期和时间。可以通过new关键词来定义Date对象。
获取时间
- 如获取当前系统时间。
var now = new Date();
console.log(now); //控制台的输出结果为Mon May 09 2022 13:48:39 GMT+0800 (中国标准时间)
- 也可以获取指定参数的时间。
//参数1:年份
//参数2:月份 (注意从0开始)
//参数3:日
//参数4:小时
//参数5:分钟
//参数6:秒
var date1 = new Date(new Date(2022,0,1,09,30,00));
console.log(date1);//控制台的输出结果为Sat Jan 01 2022 09:30:00 GMT+0800 (中国标准时间)
//参数非必填,可按需省略,不填默认为0
var date2 = new Date(2022,0,9);
console.log(date2);//控制台的输出结果为Sun Jan 09 2022 00:00:00 GMT+0800 (中国标准时间)
- 也可以将时间戳作为参数,转化成时间。
var date3 = new Date(1652076712317);
console.log(date3);//控制台的输出结果为Mon May 09 2022 14:11:52 GMT+0800 (中国标准时间)
- 当我们获取到时间之后, 可以通过其子函数获取对应的年、月、日、时、分、秒、时间戳等。
var now = new Date();
var year = now.getFullYear();//2022
var month = now.getMonth();//4 注意 4代表5月份
var day = now.getDate();//9
var hour = now.getHours(); // 14, 24小时制
var minute = now.getMinutes(); // 24
var second = now.getSeconds(); // 22
var time = now.getTime();//1652077528307 时间戳
- 有了这些子函数,我们就可以利用setDate等函数对时间进行动态设置,如标题中提到的获取昨天的时间。
var now = new Date();
var yestoday = now.setDate(now.getDate()-1);
console.log(yestoday)//控制台的输出结果为1651991719834
//对时间戳进行转化
yestoday = new Date(yestoday);
console.log(yestoday)//控制台的输出结果为Sun May 08 2022 14:37:39 GMT+0800 (中国标准时间)
//
//
//合并成代码
var now = new Date();
var yestoday = new Date(now.setDate(now.getDate()-1));
console.log(yestoday)//控制台的输出结果为Sun May 08 2022 14:41:00 GMT+0800 (中国标准时间)
//注意: 如果增加天数会改变月份或者年份,那么日期对象会自动完成这种转换。
- 如今天为9号,需获取上个月9号的时间,则需使用setMonth,其他如setFullYear,setHours均同理。
var now = new Date();
var yesMonth = now.setMonth(now.getMonth()-1);
console.log(yesMonth)//控制台的输出结果为1649486669147
//对时间戳进行转化
yesMonth = new Date(yesMonth);
console.log(yesMonth)//控制台的输出结果为Sat Apr 09 2022 14:44:50 GMT+0800 (中国标准时间)
//
//
//合并成代码
var now = new Date();
var yesMonth = new Date(now.setMonth(now.getMonth()-1));
console.log(yesMonth);//控制台的输出结果为Sat Apr 09 2022 14:45:44 GMT+0800 (中国标准时间)
//注意: 如果增加月份会改变年份,那么日期对象会自动完成这种转换。
格式化时间
当我们能够正确拿到时间之后,需要对时间进行格式化,以便更好的在界面上展示,或者使用正确的格式与后台数据进行交互。
var now = new Date();
console.log(now);//控制台的输出结果为Mon May 09 2022 14:58:53 GMT+0800 (中国标准时间)
var formatNow = formatDate(now);
console.log(formatNow);//控制台的输出结果为2022-05-09 14:58:53
function formatDate(time) {
if (time != null) {
var datetime = new Date();
datetime.setTime(time);
var year = datetime.getFullYear();
var month = (datetime.getMonth() + 1) < 10 ? "0" + (datetime.getMonth() + 1) : (datetime.getMonth() + 1);
var date = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
var hour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours();
var minute = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes();
var second = datetime.getSeconds() < 10 ? "0" + datetime.getSeconds() : datetime.getSeconds();
//获得正确的年月日时分秒之后,可根据界面要求进行自由组合
//如需转化成yyyy-mm-dd HH:mm:ss
return year + "-" + month + "-" + date + ' ' + hour + ':' + minute + ':' + second;
//如需转化成yyyy/mm/dd
// return year + "/" + month + "/" + date;
} else {
return "---";
}
}
结合上一节的内容,整理获取昨天、上个月格式化的时间。
var now = new Date();
var yestoday = formatDate(new Date(now.setDate(now.getDate()-1)));
console.log(yestoday)//控制台的输出结果为2022-05-08 15:02:41
var now = new Date();
var yesMonth = formatDate(new Date(now.setMonth(now.getMonth()-1)));
console.log(yesMonth);//控制台的输出结果为2022-04-09 15:03:30
function formatDate(time) {
if (time != null) {
var datetime = new Date();
datetime.setTime(time);
var year = datetime.getFullYear();
var month = (datetime.getMonth() + 1) < 10 ? "0" + (datetime.getMonth() + 1) : (datetime.getMonth() + 1);
var date = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
var hour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours();
var minute = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes();
var second = datetime.getSeconds() < 10 ? "0" + datetime.getSeconds() : datetime.getSeconds();
//获得正确的年月日时分秒之后,可根据界面要求进行自由组合
//如需转化成yyyy-mm-dd HH:mm:ss
return year + "-" + month + "-" + date + ' ' + hour + ':' + minute + ':' + second;
//如需转化成yyyy/mm/dd
// return year + "/" + month + "/" + date;
} else {
return "---";
}
}
实际业务
由于列表数据量过大,默认进入页面时只展示一周以内的数据。需要在进入页面时获取当前系统时间前7天的时间作为开始时间传入后台。后台接收的格式为 yyyy-mm-dd。
var now = new Date();
var beforeDay = formatDate(new Date(now.setDate(now.getDate()-7)));
console.log(beforeDay)//控制台的输出结果为2022-05-02
function formatDate(time) {
if (time != null) {
var datetime = new Date();
datetime.setTime(time);
var year = datetime.getFullYear();
var month = (datetime.getMonth() + 1) < 10 ? "0" + (datetime.getMonth() + 1) : (datetime.getMonth() + 1);
var date = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
var hour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours();
var minute = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes();
var second = datetime.getSeconds() < 10 ? "0" + datetime.getSeconds() : datetime.getSeconds();
//获得正确的年月日时分秒之后,可根据界面要求进行自由组合
//如需转化成yyyy-mm-dd HH:mm:ss
return year + "-" + month + "-" + date;
//如需转化成yyyy/mm/dd
// return year + "/" + month + "/" + date;
} else {
return "---";
}
}