创建format函数,用于格式化日期

149 阅读2分钟

前言:

date.toLocaleString();//会转为一个本地日期格式的【字符串】,虽然不能自动进制,也不能用日期的API,但是可以用字符串的API了
垃圾:具有兼容性问题,老IE输出的和主流浏览器输出的东西不一样
解决:自定义format函数

function format(date) {
  var y = date.getFullYear();
  var M = date.getMonth() + 1;
  var d = date.getDate();
  var h = date.getHours();
  h < 10 && (h = "0" + h);
  var m = date.getMinutes();
  m < 10 && (m = "0" + m);
  var s = date.getSeconds();
  s < 10 && (s = "0" + s);
  var day = date.getDay();
  var arr = ["日", "一", "二", "三", "四", "五", "六"];
  var am = h < 12 ? "上午" : "下午";
  return (
    y +
    "年" +
    M +
    "月" +
    d +
    "日 星期" +
    arr[day] +
    am +
    " " +
    h +
    ":" +
    m +
    ":" +
    s
  );
}
console.log(format(new Date()));//2022年9月1日 星期四下午 12:54:25

接下来我们实际应用一下:

  • 假设一个人入职时间为2018年4月16日,计算出3年后合同到期时间?
  • 合同到期前一个月要进行续签,计算出续签时间?
  • 如果是周末,提前到周五
  • 合同续签前一个星期人力要进行提醒,计算出提醒时间?
var join = new Date(2018, 3, 16);
var contract = new Date(
  join.getFullYear() + 3,
  join.getMonth(),
  join.getDate()
);
console.log(contract); //Fri Apr 16 2021 00:00:00 GMT+0800 (中国标准时间)
format(contract);
console.log("合同到期时间为:" + format(contract)); //2021年4月16日 星期五下午 00:00:00
 
//续签时间
var renew = new Date(
  contract.getFullYear(),
  contract.getMonth() - 1,
  contract.getDate()
);
format(renew);
console.log("续签时间为:" + format(renew)); //2020年3月16日 星期五下午 00:00:00
// 如果是周末,提前到周五
if (renew.getDay() == 0) {
  renew.setDate(renew.getDate() - 2);
} else if (renew.getDay() == 6) {
  renew.setDate(renew.getDate() - 1);
}
format(renew);
console.log(format(renew)); 
// 合同续签前一个星期人力要进行提醒,计算出提醒时间
var remind = new Date(contract);
remind.setDate(remind.getDate() - 7);
format(remind);
console.log("提醒时间为:" + format(remind)); //提醒时间为:2021年4月9日 星期五上午 00:00:00