js计算时间差封装函数
//yyyy-MM-dd HH:MM:SS 格式
function getNowFormatDate() {
var date = new Date();
var seperator1 = "-";
var seperator2 = ":";
var month = date.getMonth() + 1;
var strDate = date.getDate();
if (month >= 1 && month <= 9) {
month = "0" + month;
}
if (strDate >= 0 && strDate <= 9) {
strDate = "0" + strDate;
}
var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
+ " " + date.getHours() + seperator2 + date.getMinutes()
+ seperator2 + date.getSeconds();
return currentdate;
}
//计算日期天数差
function diff(startDate, endDate){
//startDate,endDate:yyyy-MM-dd
var arr1 = startDate.split('-')
var arr2 = endDate.split('-')
var sDate = new Date(arr1[1] + '-' + arr1[2] + '-' + arr1[0])
var eDate = new Date(arr2[1] + '-' + arr2[2] + '-' + arr2[0])
var iDays = parseInt(Math.abs(sDate - eDate) / 1000 / 60 / 60 / 24)
return iDays;
}
计算倒计时
设定的结束时间与当前时间的倒计时计算:距离结束还有,XX天XX时XX分XX秒
格式化
- 后端传回格式:2018-08-16T08:04:30.000Z
- 前端展示格式:2018-08-16 08:04:30
// 小于10的在前添加一个0
function formatNumber(n) {
const str = n.toString();
return str[1] ? str : `0${str}`;
}
function formatTime(date, dateJoin, noTime) {
// date:时间,noTime: 1--只返回日期,0--连同返回时间,dateJoin: 日期的分隔符,默认为"/"
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
const hour = date.getHours();
const minute = date.getMinutes();
const second = date.getSeconds();
const t1 = dateJoin ? [year, month, day].map(formatNumber).join(dateJoin) : [year, month, day].map(formatNumber).join("/");
const t2 = [hour, minute, second].map(formatNumber).join(":");
return noTime ? `${t1}` : `${t1} ${t2}`
}
var date = "2018-08-16T08:04:30.000Z"
var date1 = formatTime(new Date(date)) //date1: "2018/08/16 16:04:30"
浮点数计算的bug
- js计算:0.1+0.2=0.30000000000000004,解决:
/*判断obj是否为一个整数*/
function isInteger(obj){
return Math.floor(obj) === obj;
}
/**
* 将一个浮点数转换成整数,返回整数和倍数
* 如 3.14 》》314 倍数是100
*
*/
function toInteger(floatNum) {
var ret = { times: 1, num: 0 };
//是整数
if (isInteger(floatNum)) {
ret.num = floatNum;
return ret;
}
var strfi = floatNum + "";
//查找小数点的下标
var dotPos = strfi.indexOf(".");
console.log("dotPos====" + dotPos);
//获取小数的位数
var len = strfi.substr(dotPos + 1).length;
console.log("len====" + len);
//Math.pow(10,len)指定10的len次幂。
var time = Math.pow(10, len);
//将浮点数转化为整数
var intNum = parseInt(floatNum * time + 0.5, 10);
console.log("intNum====" + intNum);
ret.times = time;
ret.num = intNum;
return ret;
}
/**
*进行运算
*三个参数分别是要运算的两个数和运算符
*/
function operation(a, b, op) {
var o1 = toInteger(a);
var o2 = toInteger(b);
var n1 = o1.num;
var n2 = o2.num;
var t1 = o1.times;
var t2 = o2.times;
var max = t1 > t2 ? t1 : t2;
var result = null;
switch (op) {
case "add":
if (t1 === t2) {
result = n1 + n2;
} else if (t1 > t2) {
result = n1 + n2 * (t1 / t2);
} else {
result = n1 * (t2 / t1) + n2;
}
return result / max;
break;
case "subtract":
if (t1 === t2) {
result = n1 - n2;
} else if (t1 > t2) {
result = n1 - n2 * (t1 / t2);
} else {
result = n1 * (t2 / t1) - n2;
}
return result / max;
break;
case "multiply":
result = n1 * n2 / (t1 * t2);
return result;
break;
case "divide":
result = n1 / n2 / (t2 / t1);
return result;
break;
}
}