这是我参与8月更文挑战的第17天,活动详情查看:8月更文挑战
一、获取当前时间
这个比较简单,就是通过Data对象获取年份、月份和天数,小于10的需要判断前面是否要加'0'
//获取当天日期,格式:2021-08-01
function getCurrDate() {
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth()+1 >= 10 ? date.getMonth()+1 : '0'+(date.getMonth()+1);
let day = date.getDate() >= 10 ? date.getDate() : '0'+date.getDate();
let dateStr = year + '-'+ month + '-' + day;
return dateStr;
}
二、比较两个时间大小
1、使用字符串的方式也可以判断,但是如果字符串不规范,例如月份或日期小于10前没用补位‘0’就会产生报错,判断大小失效(本来以为简单有用,偷懒没写全,导致实际开发上线后有问题,呜呜呜,写代码是真的不能偷懒啊)。
let a = '2021-08-17';
let b = '2021-08-02';
console.log(a<b);//false
console.log(a>b);//true
2、把字符串转为日期格式,再进行判断
let a = new Date('2021-08-17');
let b = new Date('2021-8-02');
console.log(a<b);//false
console.log(a>b);//true
这样就算b字段小于10前面没有补位加“0”也可以直接进行判断成功。
3、如果是完整的时间,则直接获取时间戳进行判断大小就可以了
let a = new Date('2021-08-17 08:00:00');
let b = new Date('2021-08-02 09:00:00');
console.log(a.getTime() > b.getTime());//true
三、获取最近7天日期,并返回星期几
1、时间可变,可以是一周可以是往后很多天
2、获取当前时间戳,并获取一天的时间戳
3、通过传入的天数循环,计算当前年,月日,周几,最后加到数组中返回出去。
//调用方式
let dateList = getWeek(7);
//获取当天往后6天共7天时间的日期和星期
function getWeek(dayNum) {
let now = new Date();
let nowTime = now.getTime();
let oneDayTime = 24*60*60*1000;
let dateList = [];
for(let i = 0 ; i < dayNum ; i++){
//显示周一
let ShowTime = nowTime + i*oneDayTime ;
//初始化日期时间
let myDate = new Date(ShowTime);
let year = myDate.getFullYear();
let month = myDate.getMonth()+1 >= 10 ? myDate.getMonth()+1 : '0'+(myDate.getMonth()+1);
let date = myDate.getDate() >= 10 ? myDate.getDate() : '0'+myDate.getDate();
// console.log(year+"-"+month+"-"+date)
let str = "周" + "日一二三四五六".charAt(myDate.getDay());
// console.log(str)
let dateObj = {
date: month+"-"+date,
week: str
}
dateList.push(dateObj);
}
return dateList;
}
四、判断消息是几小时前
这是可以直接用的代码,判断时间在几分几秒前还是几天前:
//判断时间在几分几秒前
function getDateDiff(dateStr) {
let publishTime = getDateTimeStamp(dateStr) / 1000,
seconds,minutes,hours,days,
timeNow = parseInt(new Date().getTime() / 1000),
d,
date = new Date(publishTime * 1000),
_year = date.getFullYear(),
_month = date.getMonth() + 1,
_day = date.getDate(),
_hours = date.getHours(),
_minutes = date.getMinutes(),
_seconds = date.getSeconds();
//小于10在前面加‘0’
if (_month < 10) {
_month = '0' + _month;
}
if (_day < 10) {
_day = '0' + _day;
}
if (_hours < 10) {
_hours = '0' + _hours;
}
if (_minutes < 10) {
_minutes = '0' + _minutes;
}
if (_seconds < 10) {
_seconds = '0' + _seconds;
}
d = timeNow - publishTime;
days = parseInt(d / 86400);//计算出相差天数
hours = parseInt(d / 3600);//计算出相差小时数
minutes = parseInt(d / 60);//计算出相差分钟数
seconds = parseInt(d);//计算出相差秒数
if (days > 0 && days < 3) {
return days + '天前';
} else if (days <= 0 && hours > 0) {
return hours + '小时前';
} else if (hours <= 0 && minutes > 0) {
return minutes + '分钟前';
} else if (seconds < 60) {
if (seconds <= 0) {
return '刚刚';
} else {
return seconds + '秒前';
}
} else if (days >= 3 && days < 30) {
return _month + '-' + _day + ' ' + _hours + ':' + _minutes;
} else if (days >= 30) {
return _year + '-' + _month + '-' + _day + ' ' + _hours + ':' + _minutes;
}
}
//拿到传入时间的时间戳
function getDateTimeStamp(dateStr) {
// 如果时间格式为2020/07/09 21:43:19.000 需要去掉.000 不然会有问题
return Date.parse(dateStr.replace(/-/gi, "/"));
}
1、86400是相差天数的计算,因为一天是24小时,一分钟60秒,一小时60分钟,一天24小时,就是60*60*24=86400,就是上面除以86400,可以得到相差的天数。
2、3600是计算相差的小时数,因为一分钟60秒,一小时60分钟,就是60*60得到的3600,上面用当天的时间戳相减除以3600得到相差的天数,分钟、秒钟也是如此。
3、这里使用时间戳再进行乘除更为准确,并且限制了时间戳的格式,不然后面代码会引起报错。
最近写项目用到的时间戳比较多,所以总结记录一下,都是自己写的代码,以后可以直接拿来复用。