【JavaScript】封装了六个操作日期的方法,助你提升开发效率!

2022-12-10 13:07:50 浏览数 (1)


本文整理了日常开发中常用的 6 个操作日期的方法,以帮助大家提升开发效率。

1.获取指定日期是所在年份的第几天

语法

代码语言:javascript复制
const result = dayOfYear(date)

参数

  • date (String) : 指定日期,可传参数同 new Date(),并且支持 yyyy-mm-dd格式,不传默认获取当天。

返回值

Number : 指定日期所在年份的第几天。

源码

代码语言:javascript复制
const dayOfYear = (date) => {
  const myData = date ? new Date(typeof date === 'string' && date.includes('-') ? date.replace(/-/g, '/') : date) : new Date();
  return Math.floor((myData - new Date(myData.getFullYear(), 0, 0)) / 1000 / 60 / 60 / 24);
};

例子

代码语言:javascript复制
const result1 = dayOfYear()
const result2 = dayOfYear("2021,9,15")
const result3 = dayOfYear("2021-9-16")
console.log(result1) //=> 257
console.log(result2) //=> 258
console.log(result3) //=> 259

2.获取两个日期之间的差值

语法

代码语言:javascript复制
const result = getDayDiff(date1, date2, unit)

参数

  • date1 (String) : 指定日期1,可传参数同 new Date(),并且支持 yyyy-mm-dd格式。
  • date2 (String) : 指定日期2,可传参数同 new Date(),并且支持 yyyy-mm-dd格式。
  • unit (String) : 设置差值的单位,支持以下值。

day

hour

minute

second

ms

小时

分钟

毫秒

返回值

Number : 两个日期之间的差值。

源码

代码语言:javascript复制
const getDayDiff = (date1, date2, unit) => {
  const myDate1 = typeof date1 === 'string' && date1.includes('-') ? date1.replace(/-/g, '/') : date1;
  const myDate2 = typeof date2 === 'string' && date2.includes('-') ? date2.replace(/-/g, '/') : date2;
  const map = {
    day: 1000 * 60 * 60 * 24,
    hour: 1000 * 60 * 60,
    minute: 1000 * 60,
    second: 1000,
    ms: 1,
  };
  return Math.abs((new Date(myDate2) - new Date(myDate1)) / (map[unit]));
};

例子

代码语言:javascript复制
// 以天为单位
const result1 = getDayDiff("2021,9,15",'2021,9,16','day')
// 以小时为单位
const result2 = getDayDiff("2021,9,15",'2021,9,16','hour')
// 以分钟为单位
const result3 = getDayDiff("2021,9,15",'2021,9,16','minute')
// 以秒为单位
const result4 = getDayDiff("2021,9,15",'2021,9,16','second')
// 以毫秒为单位
const result5 = getDayDiff("2021,9,15",'2021,9,16','ms')
console.log(result1) //=> 1
console.log(result2) //=> 24
console.log(result3) //=> 1440
console.log(result4) //=> 86400
console.log(result5) //=> 86400000

3.判断是否达到指定时间

通常用来做定时任务,达到指定时间后更改视图等操作。 语法

代码语言:javascript复制
const result = isScheduled(date)

参数

  • date (String) : 指定日期,指定日期,格式为"YYYY-MM-DD HH:mm:ss"。

返回值

Booleantrue 达到指定时间, false 没有达到指定时间。

源码

代码语言:javascript复制
const isScheduled = (date) => {
  const date1 = new Date();
  const date2 = new Date(Date.parse(date));
  return date1 > date2;
};

例子

代码语言:javascript复制
//测试日期为2021-10-18
const result1 = isScheduled('2021-10-17 00:00:00')
const result2 = isScheduled('2021-10-19 00:00:00')
console.log(result1) //=> true
console.log(result2) //=> false

4.判断指定日期是不是今天

语法

代码语言:javascript复制
const result = isToday(date)

参数

  • date (String) : 指定日期,可传参数同 new Date(),并且支持 yyyy-mm-dd格式 ,不传默认获取当天。

返回值

Booleantrue 是今天, false 不是今天。

源码

代码语言:javascript复制
const isToday = (date) => {
  // 当前日期
  const curDate = new Date();
  // 指定日期
  const tarData = date ? new Date(typeof date === 'string' && date.includes('-') ? date.replace(/-/g, '/') : date) : new Date();
  return ['getFullYear', 'getMonth', 'getDate'].every((i) => curDate[i]() === tarData[i]());
};

例子

代码语言:javascript复制
//测试日期为2021-09-26
const result1 = isToday(new Date())
const result2 = isToday("1998-03-09")
console.log(result1) //=> true
console.log(result2) //=> false

5.判断指定日期是不是n天后

语法

代码语言:javascript复制
const result = isTomorrow(date, n)

参数

  • date (String) : 指定日期,可传参数同 new Date(),并且支持 yyyy-mm-dd格式 ,不传默认获取当天。
  • n (Number) : n 天后,不传默认为 1 ,也就是明天。

返回值

Booleantruen 天后, false 不是 n 天后。

源码

代码语言:javascript复制
const isTomorrow = (date,  n = 1) => {
  const curDate = new Date(); // 当前日期
  curDate.setDate(curDate.getDate()   n); // 当前日期加一天
  // 指定日期
  const tarData = date ? new Date(typeof date === 'string' && date.includes('-') ? date.replace(/-/g, '/') : date) : new Date();
  return ['getFullYear', 'getMonth', 'getDate'].every((i) => curDate[i]() === tarData[i]());
};

例子

代码语言:javascript复制
// 测试日期为2021-09-26
const result1 = isTomorrow(new Date())
const result2 = isTomorrow("2021-09-27",1)
const result3 = isTomorrow("2021-09-27",2)
const result4 = isTomorrow("2021-09-28",2)
console.log(result1) //=> false
console.log(result2) //=> true
console.log(result3) //=> false
console.log(result4) //=> true

6.判断指定日期是不是n天前

语法

代码语言:javascript复制
const result = isYesterday(date,  n)

参数

  • date (String) : 指定日期,可传参数同 new Date(),并且支持 yyyy-mm-dd格式 ,不传默认获取当天。
  • n (Number) : n 天前,不传默认为 1 ,也就是昨天。

返回值

Booleantruen 天前, false 不是 n 天前。

源码

代码语言:javascript复制
const isYesterday = (date, n = 1) => {
  const curDate = new Date(); // 当前日期
  curDate.setDate(curDate.getDate() - n); // 当前日期减n天
  // 指定日期
  const tarData = date ? new Date(typeof date === 'string' && date.includes('-') ? date.replace(/-/g, '/') : date) : new Date();
  return ['getFullYear', 'getMonth', 'getDate'].every((i) => curDate[i]() === tarData[i]());
};

例子

代码语言:javascript复制
// 测试日期为2021-09-26
const result1 = isYesterday(new Date())
const result2 = isYesterday("2021-09-25",1)
const result3 = isYesterday("2021-09-25",2)
const result4 = isYesterday("2021-09-24",2)
console.log(result1) //=> false
console.log(result2) //=> true
console.log(result3) //=> false
console.log(result4) //=> true

本文的所有方法收录于我自己的开源仓库

0 人点赞