获取当前时间

得到当前时间的 YYYY-MM-DD HH:MI:ss 格式

function nowtime(){
    var _this = new Date();
    var yy = _this.getFullYear();
    var mm = _this.getMonth()+1<10?'0'+(_this.getMonth()+1):(_this.getMonth()+1);
    var dd = _this.getDate()<10?'0'+_this.getDate() : _this.getDate();
    var hh = _this.getHours() < 10 ? '0' + _this.getHours() : _this.getHours();
    var mf = _this.getMinutes() < 10 ? '0' + _this.getMinutes() : _this.getMinutes();
    var ss = _this.getSeconds() < 10 ? '0' + _this.getSeconds() : _this.getSeconds();
    var nowtime = yy + '-' + mm + '-' + dd + ' ' + hh + ':' + mf + ':' + ss;
    return nowtime;
}

计算时间差

相差的天-小时-分钟-秒

传入时间格式YYYY-MM-DD HH:MI:ss 得到两个时间相差的 年-月-天-小时-分钟-秒

传入时间格式YYYY-MM-DD 得到两个时间相差的 年月日

function difftime(){
	var new_date = new Date(); //格式化日期,不传默认当前时间
	var old_date = new Date('2021-12-09 11:11:11'); 
	var difftime = (new_date - old_date)/1000; //计算时间差,并把毫秒转换成秒
    var year = Math.floor(difftime / 86400 / 365);//年
    var month = Math.floor(difftime/ 86400 / 30);//月
	var days = parseInt(difftime/86400); // 天  24*60*60*1000 
	var hours = parseInt(difftime/3600)-24*days;    // 小时 60*60 总小时数-过去的小时数=现在的小时数 
	var minutes = parseInt(difftime%3600/60); // 分钟 -(day*24) 以60秒为一整份 取余 剩下秒数 秒数/60 就是分钟数
	var seconds = parseInt(difftime%60);  // 以60秒为一整份 取余 剩下秒数
	var difftimes = year+"年,"+month+"月,"+ days+"天, "+hours+"小时, "+minutes+"分钟, "+seconds+"秒";
	return   difftimes;
}

相差的分钟

传入的时间格式 HH:mi

得到相差的分钟数

function timeDifference(startTime,endTime){ 
	var start1=startTime.split(":");
	var startAll=parseInt(start1[0]*60)+parseInt(start1[1]);
	var end1=endTime.split(":");
	var endAll=parseInt(end1[0]*60)+parseInt(end1[1]);
	return endAll-startAll;
}

console.log(timeDifference("08:30","10:30"));   ////120

获取指定日期的前后N天

传入时间格式 date: YYYY-MM-DD ;day:负数为前N天,正数为后N天

得到date的 前后day天

function getNextDate(date, day) {
	var dd = new Date(date);
	dd.setDate(dd.getDate() + day);
	var y = dd.getFullYear();
	var m = dd.getMonth() + 1 < 10 ? "0" + (dd.getMonth() + 1) : dd.getMonth() + 1;
	var d = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate();
	return y + "-" + m + "-" + d;
};

console.log(getNextDate("2020-01-01", -1))   ////2019-12-31

获取指定日期的前后N个月

传入时间格式 date:YYYY-MM-DD ; monthNum:负数为前N月,正数为后N月

得到date的 前后monthNum月

function GetPreMonthDay(date, monthNum) {
	var dateArr = date.split('-');
	var year = dateArr[0]; //获取当前日期的年份
	var month = dateArr[1]; //获取当前日期的月份
	var day = dateArr[2]; //获取当前日期的日
	var days = new Date(year, month, 0);
	days = days.getDate(); //获取当前日期中月的天数
	var year2 = year;
	var month2 = parseInt(month) + monthNum;
	if (month2 <= 0) {
		year2 = parseInt(year2) - parseInt(month2 / 12 == 0 ? 1 : parseInt(month2) / 12);
		month2 = 12 - (Math.abs(month2) % 12);
	}
	if (month2 > 12) {
		year2 = parseInt(year2) + parseInt(month2 / 12 == 0 ? 1 : parseInt(month2) / 12);
		month2 = parseInt(month2 % 12);
	}
	var day2 = day;
	var days2 = new Date(year2, month2, 0);
	days2 = days2.getDate();
	if (day2 > days2) {
		day2 = days2;
	}
	if (month2 < 10) {
		month2 = '0' + month2;
	}
	var t2 = year2 + '-' + month2 + '-' + day2;
	return t2;
}

console.log(GetPreMonthDay("2020-01-01", -1))   ////2019-12-01

计算指定日期为周几

传入时间格式 YYYY-MM-DD

function getWeek(dateString) {
   var dateArray = dateString.split("-");
   date = new Date(dateArray[0], parseInt(dateArray[1] - 1), dateArray[2]);
   return "周" + "日一二三四五六".charAt(date.getDay());
}

console.log(getWeek('2021-12-09'))  ////周四

判断多个时间段是否有重复

将时间段按数组对象传入;这里只判断的是时分秒

s:开始时间 e:结束时间

var  dateArr = [
			   { s: '01:00:00', e: '14:30:00' },
			   { s: '14:20:00', e: '15:05:00' }
			]
function judege(idx) {
  for (var k in dateArr) {
	if (idx !== k) {
		if (dateArr[k].s <= dateArr[idx].s && dateArr[k].e > dateArr[idx].s) {
		  return false
		}
		if (dateArr[k].s < dateArr[idx].e && dateArr[k].e >= dateArr[idx].e) {
		  return false
		}
	}
  }
  return true
}
function Fn() {
  for (var k in dateArr) {
	if (!judege(k)) {
	  return false
	}
  }
  return true
}

console.log(Fn())	//true的话表示没有重叠,false表示有重叠

这里使用了for...in循环;

for…in 语句用于遍历数组或者对象的属性

var obj={name:'小明',age:12}
for(var k in obj){
	console.log(k)    ///name   age
	console.log(obj[k])    ///小明   12
}
var arr=['小明','小花','小林']
for(var k in arr){
	console.log(k)  ///0   1   2
	console.log(arr[k])   ///小明  小花  小林
}
var arrobj=[{name:'小明',age:12},{name:'小花',age:15}]
for(var k in arrobj){
	console.log(k)   ///0    1
	console.log(arrobj[k])   ///{name:'小明',age:12}    {name:'小花',age:15}
}

由此可以看出使用for...in 遍历对象时,k为对象的属性;遍历数组和数组对象时,k为下标

倒计时

传入一个固定的结束时间

function getEndTime(endTime) {
	var startDate = new Date(); //开始时间,当前时间
	var endDate = new Date(endTime); //结束时间,需传入时间参数
	var t = endDate.getTime() - startDate.getTime(); //时间差的毫秒数
	var d = 0,
		h = 0,
		m = 0,
		s = 0;
	if (t >= 0) {
		d = Math.floor(t / 1000 / 3600 / 24);
		h = Math.floor(t / 1000 / 60 / 60 % 24);
		m = Math.floor(t / 1000 / 60 % 60);
		s = Math.floor(t / 1000 % 60);
	}
	return {d:d,h:h,m:m,s:s};
}

var active = document.getElementById("active");
var timer = setInterval(() => {
	var time = getEndTime('2021-12-10 12:00:00')//此处设置你想要结束的时间
	var endtime = '距离干饭还有:' + time.d + '天' + time.h + '小时' + time.m + '分钟' + time.s + '秒';
	if(time.d == 0 && time.h == 0 && time.m == 0 && time.s == 0){
		clearInterval(timer);
		active.innerHTML = "干饭!!!";
	}
}, 1000);

公历农历互转

公历农历互转

将时间格式为YYYY/MM/DD HH:MI:ss格式替换为YYYY-MM-DD HH:MI:ss

var str='2021/11/16 13:17:37'
console.log(str.replace(/\//g,'-'))     ///2021-11-16 13:17:37

获取指定时间的时间戳

function getTargetTime(t) {
    return new Date(t).getTime()
}

时间戳转换为日期

function add0(m) {
	return m < 10 ? '0' + m : m
}
function format(shijianchuo) {
	//shijianchuo是整数,否则要parseInt转换
	var time = new Date(shijianchuo);
	var y = time.getFullYear();
	var m = time.getMonth() + 1;
	var d = time.getDate();
	var h = time.getHours();
	var mm = time.getMinutes();
	var s = time.getSeconds();
	return y + '-' + add0(m) + '-' + add0(d) + ' ' + add0(h) + ':' + add0(mm) + ':' + add0(s);
}