关于日期时间的常用方法 | 8月更文挑战

568 阅读3分钟

这是我参与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、这里使用时间戳再进行乘除更为准确,并且限制了时间戳的格式,不然后面代码会引起报错。

最近写项目用到的时间戳比较多,所以总结记录一下,都是自己写的代码,以后可以直接拿来复用。