JavaScript 日期比较

检查是否可以从给定值创建有效的日期对象

使用点差运算符 (...) 将参数数组传递给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)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值