检查是否可以从给定值创建有效的日期对象
使用点差运算符 (...) 将参数数组传递给Date构造 函数。
用Date.prototype.valueOf()和Number.isNaN()以检查是否有效Date可以从给定的值创建对象。
//声明函数
const isDateValid = (...val) => !Number.isNaN(new Date(...val).valueOf());
//调用
isDateValid('December 17, 1995 03:24:00'); //输出 true
isDateValid('1995-12-17T03:24:00'); //输出 true
isDateValid('2022-10-41'); //输出 false
isDateValid('2022-10-11'); //输出 true
isDateValid('1995-12-17 T03:24:00'); //输出 false
isDateValid('Duck'); //输出 false
isDateValid(1995, 11, 17); //输出 true
isDateValid(1995, 11, 17, 'Duck'); //输出 false
isDateValid({}); //输出 false
以月为单位的日期差异
//声明函数
const getMonthsDiffBetweenDates = (dateInitial, dateFinal) =>
Math.max(
(dateFinal.getFullYear() - dateInitial.getFullYear()) * 12 +
dateFinal.getMonth() -
dateInitial.getMonth(),
0
);
//调用
getMonthsDiffBetweenDates(new Date('2017-12-13'), new Date('2018-04-29')); // 输出4
以天为单位的日期差异
//声明函数
const getDaysDiffBetweenDates = (dateInitial, dateFinal) =>
(dateFinal - dateInitial) / (1000 * 3600 * 24);
//调用
getDaysDiffBetweenDates(new Date('2017-12-13'), new Date('2017-12-22')); // 输出 9
以小时为单位的日期差异
//声明函数
const getHoursDiffBetweenDates = (dateInitial, dateFinal) =>
(dateFinal - dateInitial) / (1000 * 3600);
//调用
getHoursDiffBetweenDates(
new Date('2021-04-24 10:25:00'),
new Date('2021-04-25 10:25:00')
); //输出 24
以分钟为单位的日期差异
//声明函数
const getMinutesDiffBetweenDates = (dateInitial, dateFinal) =>
(dateFinal - dateInitial) / (1000 * 60);
//调用
getMinutesDiffBetweenDates(
new Date('2021-04-24 01:00:15'),
new Date('2021-04-24 02:00:15')
); //输出 60
以秒为单位的日期差异
//申明函数
const getSecondsDiffBetweenDates = (dateInitial, dateFinal) =>
(dateFinal - dateInitial) / 1000;
//调用
getSecondsDiffBetweenDates(
new Date('2020-12-24 00:00:15'),
new Date('2020-12-24 00:00:17')
); //输出 2
每月最后的日期
//声明函数
const lastDateOfMonth = (date = new Date()) => {
let d = new Date(date.getFullYear(), date.getMonth() + 1, 0);
return d.toISOString().split('T')[0];
};
//调用
lastDateOfMonth(new Date('2015-08-11')); //输出 '2015-08-30'
检查一个日期是否与另一个日期相同
//声明函数
const isSameDate = (dateA, dateB) =>
dateA.toISOString() === dateB.toISOString();
//调用
isSameDate(new Date(2010, 10, 20), new Date(2010, 10, 20)); //输出 true
明天的日期
使用Date构造函数以获取当前日期。
使用Date.prototype.getDate()并将值设置为结果Date.prototype.setDate().
用Date.prototype.toISOString()以返回字符串信息。yyyy-mm-dd
//声明函数
const tomorrow = () => {
let d = new Date();
d.setDate(d.getDate() + 1);
return d.toISOString().split('T')[0];
};
//调用
tomorrow(); //输出 2022-11-18 (注:今天是2022-11-17 9:55)
昨天的日期
使用Date构造函数以获取当前日期。
使用Date.prototype.getDate()并将值设置为结果Date.prototype.setDate().
用Date.prototype.toISOString()以返回字符串信息。yyyy-mm-dd
//声明函数
const yesterday = () => {
let d = new Date();
d.setDate(d.getDate() - 1);
return d.toISOString().split('T')[0];
};
//调用
yesterday(); //输出 2022-11-16 (注:今天是2022-11-17 9:56)
检查闰年
//声明函数
const isLeapYear = year => new Date(year, 1, 29).getMonth() === 1;
//调用
isLeapYear(2019); //输出 false
isLeapYear(2020); //输出 true
检查日期是否介于其他两个日期之间。
//声明函数
const isBetweenDates = (dateStart, dateEnd, date) =>
date > dateStart && date < dateEnd;
//调用
isBetweenDates(
new Date(2010, 11, 20),
new Date(2010, 11, 30),
new Date(2010, 11, 19)
); //输出 false
isBetweenDates(
new Date(2010, 11, 20),
new Date(2010, 11, 30),
new Date(2010, 11, 25)
); //输出 true
检查一个日期是否早于另一个日期。
//声明函数
const isBeforeDate = (dateA, dateB) => dateA < dateB;
//调用
isBeforeDate(new Date(2010, 10, 20), new Date(2010, 10, 21)); //输出 true
检查一个日期是否在另一个日期之后
//声明函数
const isAfterDate = (dateA, dateB) => dateA > dateB;
//调用
isAfterDate(new Date(2010, 10, 21), new Date(2010, 10, 20)); //输出 true
计算获取几天前的日期
//使用Date构造函数以获取当前日期。
//用Math.abs()和Date.prototype.getDate()相应地更新日期并使用Date.prototype.setDate().
//用Date.prototype.toISOString()以返回字符串信息。yyyy-mm-dd
//声明函数
const daysAgo = n => {
let d = new Date();
d.setDate(d.getDate() - Math.abs(n));
return d.toISOString().split('T')[0];
};
//调用
daysAgo(20); //输出 2022-10-28 (注:今天日期为2022-11-17 9:50)
计算获取几天后的日期
使用Date构造函数以获取当前日期。
用Math.abs()和Date.prototype.getDate()相应地更新日期并使用Date.prototype.setDate().
用Date.prototype.toISOString()以返回字符串信息。yyyy-mm-dd
//声明函数
const daysFromNow = n => {
let d = new Date();
d.setDate(d.getDate() + Math.abs(n));
return d.toISOString().split('T')[0];
};
//调用
daysFromNow(5); //输出 2022-11-22 (注:今天是2022-11-17 9:52)