工程方法,持续更新

382 阅读2分钟

话不多说,我们时间不多

工作中常用的时间工具函数!

1.获取自定义格式化时间

/**
 * @param {String} fmt 自定义格式化时间类型(可选)
 * @returns 格式时间
 */
Date.prototype.format = function (fmt = "yyyy-MM-dd hh:mm:ss") {
  const 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(), // 毫秒
  };
  //根据y的长度截取年
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(
      RegExp.$1,
      (this.getFullYear() + "").substr(4 - RegExp.$1.length)
    );
  }
  for (let k in o) {
    if (new RegExp(`(${k})`).test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)
      );
    }
  }
  return fmt;
};

2.获取格式化时间YYYY-MM-DD HH:mm:ss

/**
 * 传入时间轴,返回格式化时间
 * @param {Date} date 时间轴 (可选)
 * @returns 年-月-日 时:分:秒
 */
export function getFormatTime(date = new Date()) {
  const paddingZero = (num) => {
    return num < 10 ? ("0" + num) : num;
  };
  const year = date.getFullYear();
  const month = paddingZero(parseInt(date.getMonth()) + 1);
  const day = paddingZero(date.getDate());
  const hour = paddingZero(date.getHours());
  const min = paddingZero(date.getMinutes());
  const second = paddingZero(date.getSeconds());
  return `${[year, month, day].join("-")} ${hour}:${min}:${second}`;
}

3.获取星期

/**
 * 传入时间轴,返回星期几
 * @param {Date} date 时间轴 (可选)
 * @returns 星期?
 */
export function getWeek(date = new Date()) {
   return "星期" + "日一二三四五六".charAt(date.getDay());
};

4.获取月份

/**
 * 传入时间轴,返回月份
 * @param {Date} date 传入时间戳
 * @returns 当前月份
 */
export function getMonth(date = new Date()) {
  const day = date.getMonth();
  const months = [
    {
      zh: "一月",
      en: "January",
    },
    {
      zh: "二月",
      en: "February",
    },
    {
      zh: "三月",
      en: "March",
    },
    {
      zh: "四月",
      en: "April",
    },
    {
      zh: "五月",
      en: "May",
    },
    {
      zh: "六月",
      en: "June",
    },
    {
      zh: "七月",
      en: "July",
    },
    {
      zh: "八月",
      en: "August",
    },
    {
      zh: "九月",
      en: "September",
    },
    {
      zh: "十月",
      en: "October",
    },
    {
      zh: "十一月",
      en: "November",
    },
    {
      zh: "十二月",
      en: "December",
    },
  ];
  months[day].key = day + 1;
  return months[day];
}

5.计算剩余时间的方法(倒计时)

/**
 * 对传入时间对比当前时间 返回剩余时间
 * @param {Date} time 传入时间戳
 * @returns 剩余时间
 */
export function leftTime(time = Date.now()) {
  const paddingZero = (num) => {
    return num < 10 ? "0" + num : num;
  };
  const leftTime = time - Date.now();
  const Day = paddingZero(parseInt(leftTime / 1000 / 60 / 60 / 24, 10));
  const Hour = paddingZero(parseInt((leftTime / 1000 / 60 / 60) % 24, 10));
  const Min = paddingZero(parseInt((leftTime / 1000 / 60) % 60, 10));
  const Sec = paddingZero(parseInt((leftTime / 1000) % 60, 10));
  return {
    Day,
    Hour,
    Min,
    Sec,
  };
}

6.获取某一天所在的星期范围

/**
 * getWeekRange("2021-8-24");
 * @param {Date} date:"2021-8-24"字符串时间
 * @returns [周开始,周结束]
 */
function getWeekRange(date) {
  if (!date) return;
  const now = new Date(date);
  const nowDayOfWeek = now.getDay();//获取星期几
  const nowDay = now.getDate();//获取当月的日期
  const nowMonth = now.getMonth();
  let nowYear = now.getYear();
  nowYear += nowYear < 2000 ? 1900 : 0;
  const weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek + 1); // 获取周一
  const weekEndDate = new Date(nowYear, nowMonth, nowDay + (7 - nowDayOfWeek)); // 获取周日
  return [weekStartDate, weekEndDate];
}

7.获取某一天至截止年份剩余的天数

/**
 * getLeftYear()
 * @param {Date} now 时间戳
 * @param {Number} year 截止年份
 * @returns 距离截止年份结束还剩余的天数
 */
function getLeftYear(
  now = new Date("2020-07-30"),
  year = new Date().getFullYear() + 1
) {
  const nextyear = year;
  const lastday = new Date(new Date(nextyear, 0, 1) - 1);
  const diff = lastday - now;
  return Math.ceil(diff / (1000 * 60 * 60 * 24));
}