Date对象用于处理日期与时间。
时间对象文档: https://www.runoob.com/jsref/jsref-obj-date.html
var d = new Date(); //当前时间
//时间戳获取时间对象
var d = new Datel(milliseconds);
//字符串时间转成时间对象
var d = new Date(dateString);
//依次指定年月日时分秒毫秒
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);
var d = Date.parse("March 21,2012");
对Date进行扩展,增加format方法。以后调用Date对象的format方法即可将日期转换成我们指定格式的 字符串(String) 。 具体见下面的时间工具类。
//字符串时间转成时间对象
var d = new Date(dateString);
Date对象之间直接比较大小
转换成时间戳比较大小
原理在于Date对象的setXXX方法,将对应的时间重新赋值。
//在原来时间的基础.上加1天,其他同理
date.setDate(date.getDate() + 1)
//在原来的基础上加上一个月,如果当前月12月的话,年会自动加上一年。
date.setMonth(date.getMonth() + 1)
时间减的话直接换成负数,天数减到0的话会跳转到上一个月。
原理:计算出两个时间的时间戳,求出时间戳的差, 这就是两个时间相差的毫秒数,然后根据需要计算出秒、分钟、小时等数据。 .
##总结的时间工具类
下面是个人整理的时间Date类型操作的工具类
/*
时间格式常量
*/
const DateFormat = {
//年月日时分秒毫秒
YYYY_MM_DD_HH_MM_SS_S: "yyyy-MM-dd hh:mm:ss:S",
//年月日时分秒
YYYY_MM_DD_HH_MM_SS: "yyyy-MM-dd hh:mm:ss",
//年月日时分
YYYY_MM_ DD_HH_MM
:
"yyyy-MM-dd hh:mm
//年月日时
YYYY_MM_DD_HH: "yyyy-MM-dd hh",
//年月日
YYYY_MM_DD
:
"yyyy-MM-dd,
//年月
YYYY_MM: "yyyy-MM",
}
/*
给Date对象增加format方法:格式化时间,
返回String,参数请参考DateFormat中的常量
*/
Date.prototype.format = function (fmt) {
var o = {
"M+": this.getMonth() + 1,//月份.
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.S1, (RegExp.$1.length == 1) ? (o[k]) : ("00" + o[k]).substr(("" + o[k]).length));
}
}
return fmt;
}
/*
增加num年
*/
Date.prototype.addYear = function (num) {
if (isNaN(num)) num = 0;
this.setFullYear(this.getFullYear() + num);
}
/*
增加num月
*/
Date.prototype.addMonth = function (num) {
if (isNaN(num)) num = 0;
this.setMonth(this.getMonth() + num);
}
/*
增加num天
*/
Date.prototype.addDate = function (num) {
if (isNaN(num)) num = 0;
this.setDate(this.getDate() + num);
}
/*
增加num小时
*/
Date.prototype.addHours = function (num) {
if (isNaN(num)) num = 0;
this.setHours(this.getHours() + num);
}
/*
增加num分钟
*/
Date.prototype.addMinutes = function (num) {
if (isNaN(num)) num = 0;
this.setMinutes(this.getMinutes() + num);
}
/*
增加num秒
*/
Date.prototype.addSeconds = function (num) {
if (isNaN(num)) num = 0;
this.setSeconds(this.getSeconds() + num);
}
/*计算Date的时间差
这里年月日时分秒的时间差计算精度在小数点后四
位,
如果业务需要一天半算一 天或者两天的话,
可以使用Math中的向.上或向下取整的方法获取。
*/
const DateDifference = {
//计算相差年(365天)
computeYear: (start, end) => {
if (start instanceof Date && end instanceof Date) {
const difference = Math.abs(end.getTime() - start.getTime());
//保留四位小数
const year = Math.round(difference / (1000 * 60 * 60 * 24 * 365) * 10000) / 10000;
return year;
}
console.error("两个参数必须都为Date类型");
return 0;
},
//计算相差月(30天)
computeMonth: (start, end) => {
if (start instanceof Date && end instanceof Date) {
const difference = Math.abs(end.getTime() - start.getTime());
//保留四位小数
const month = Math.round(difference / (1000 * 60 * 60 * 24 * 30) * 10000) / 10000;
return month;
}
console.error("两个参数必须都为Date类型");
return 0;
},
//计算相差日
computeDate: (start, end) => {
if (start instanceof Date && end instanceof Date) {
const difference = Math.abs(end.getTime() - start.getTime());
//保留四位小数
const day = Math.round(difference / (1000 * 60 * 60 * 24) * 10000) / 10000;
return day;
}
console.error("两个参数必须都为Date类型");
return 0;
},
//计算相差小时
computeHours: (start, end) => {
if (start instanceof Date && end instanceof Date) {
const difference = Math.abs(end.getTime() - start.getTime());
//保留四位小数
const hour = Math.round(difference / (1000 * 60 * 60) * 10000) / 10000;
return hour;
}
console.error("两个参数必须都为Date类型");
return 0;
},
//计算相差分钟
computeMinutes: (start, end) => {
if (start instanceof Date && end instanceof Date) {
const difference = Math.abs(end.getTime() - start.getTime());
//保留四位小数
const minute = Math.round(difference / (1000 * 60) * 10000) / 10000;
return minute;
}
console.error("两个参数必须都为Date类型");
return 0;
},
//计算相差秒
computeSeconds: (start, end) => {
if (start instanceof Date && end instanceof Date) {
const difference = Math.abs(end.getTime() - start.getTime());
//保留四位小数
const second = Math.round(difference / (1000) * 10000) / 10000;
return second;
}
console.error("两个参数必须都为Date类型");
return 0;
},
//计算时间差:日、时、分、秒、毫秒
compute: (start, end) => {
if (start instanceof Date && end instanceof Date) {
const difference = Math.abs(end.getTime() - start.getTime());
const dayDiff = Math.floor(difference / (24 * 60 * 60 * 1000)); //相差天数
//计算天数后剩余的毫秒数
const leave1 = difference % (24 * 60 * 60 * 1000);
//相差小时数
const hourDiff = Math.floor(leave1 / (60 * 60 * 1000));
//计算小时数后剩余的毫秒数
const leave2 = leave1 % (60 * 60 * 1000);
//相差分钟数
const minuteDiff = Math.floor(leave2 / (60 * 1000));
//计算分钟数后剩余的毫秒数
const leave3 = leave2 % (60 * 1000);
const SecondDiff = Math.floor(leave3 / (1000));//相差秒数
//计算秒数后剩余的毫秒数
const leave4 = leave3 % (1000);
return [dayDiff, hourDiff, minuteDiff, SecondDiff, leave4];
}
console.error("两个参数必须都为Date类型");
return [0, 0, 0, 0, 0]
}
}