前言:
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