生成指定范围的日期

  1. const dateRangeGenerator = function* (start, end, step = 1) {
  2. let d = start
  3. while (d < end) {
  4. yield new Date(d)
  5. d.setDate(d.getDate() + step)
  6. }
  7. };
  8. // 例子
  9. [...dateRangeGenerator(new Date('2021-06-01'), new Date('2021-06-04'))]
  10. // [ 2021-06-01, 2021-06-02, 2021-06-03 ]

日期加减xx天

  1. const addDaysToDate = (date, n) => {
  2. const d = new Date(date)
  3. d.setDate(d.getDate() + n)
  4. return d.toISOString().split('T')[0]
  5. };
  6. // 例子
  7. addDaysToDate('2020-10-15', 10) // '2020-10-25'
  8. addDaysToDate('2020-10-15', -10) // '2020-10-05'

日期加减xx分钟

  1. const addMinutesToDate = (date, n) => {
  2. const d = new Date(date)
  3. d.setTime(d.getTime() + n * 60000)
  4. return d.toISOString().split('.')[0].replace('T',' ')
  5. };
  6. // 例子
  7. addMinutesToDate('2020-10-19 12:00:00', 10) // '2020-10-19 12:10:00'
  8. addMinutesToDate('2020-10-19', -10) // '2020-10-18 23:50:00'

获取日期所属的季度和年份

  1. const quarterOfYear = (date = new Date()) => [
  2. Math.ceil((date.getMonth() + 1) / 3),
  3. date.getFullYear()
  4. ];
  5. // 例子
  6. quarterOfYear(new Date('07/10/2018')); // [ 3, 2018 ]
  7. quarterOfYear() // [ 4, 2020 ]

获取日期星期

  1. const dayName = (date, locale = 'zh-CN') =>
  2. new Date(date).toLocaleDateString(locale, { weekday: 'long' })
  3. // 例子
  4. dayName(new Date('2021-09-22'), 'zh-CN') // 星期三

判断是否是闰年

  1. const isLeapYear = year => new Date(year, 1, 29).getMonth() === 1
  2. // 例子
  3. isLeapYear(2019) // false
  4. isLeapYear(2020) // true

判断是否是工作日

  1. const isWeekday = (d = new Date()) => d.getDay() % 6 !== 0
  2. // 例子
  3. isWeekday() // true

判断是否是周末

  1. const isWeekend = (d = new Date()) => d.getDay() % 6 === 0
  2. // 例子
  3. isWeekend()