1 判断闰年函数
闰年需要满足以下两个条件,1、能被4整除,但不能被100整除;2、能被400整除
/**
* 判断润年
* @param {string} year 年份
* @return {Boolean}
*/
const isLeap = function(year) {
if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {
return true;
}
return false;
};
使用Date自带的getDay方法可以获得指定日期的星期,返回的数值为0到6,分别代表星期天到星期六
/**
* 获取星期
* @param {string} date 日期
* @return {string} 星期
*/
const getWeek = function(date) {
let Stamp = new Date(date);
let weeks = ["日", "一", "二", "三", "四", "五", "六"];
return weeks[Stamp.getDay()];
};
只需要区分大小月,然后再特殊处理一下二月份闰年的情况即可
/**
* 获取月份天数
* @param {string} year 年份
* @param {string} month 月份
* @return {number} 月份天数
*/
const getMonthDays = function(year, month) {
month = parseInt(month) - 1;
if (month < 0 || month > 11) return "";
let months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
if (isLeap(year)) {
months[1] = 29;
}
return months[month];
};
在遇到一位数的月份和天数时,我们往往需要对其补零,保持两位数
/**
* 数字补零
* @param {string} str
* @return {string}
*/
const zero = function(str) {
str = parseInt(str);
return str > 9 ? str : "0" + str;
};
入参为格式字符串,主要有"yyyy-mm-dd"、"mm-dd-yyyy"、"yyyy-mm-dd hh:MM:ss"、"hh:MM:ss"、"yyyy"、"mm"、"dd"、"hh"等等…………,其中y代表年份,m代表月份,d代表天数,h为小时,M是分钟,S为秒数
/**
* 获取今天日期
* @param {string} str 日期格式
* @return {string} 格式化日期
*/
const getToday = function(str = "yyyy-mm-dd") {
const date = new Date();
const year = date.getFullYear(),
month = zero(date.getMonth() + 1),
day = zero(date.getDate()),
hour = zero(date.getHours()),
minute = zero(date.getMinutes()),
second = zero(date.getSeconds());
let res = "";
switch (str) {
case "yyyy-mm-dd":
res = year + "-" + month + "-" + day;
break;
case "mm-dd-yyyy":
res = month + "-" + day + "-" + year;
break;
case "yyyy-mm-dd hh:MM:ss":
res =
year +
"-" +
month +
"-" +
day +
" " +
hour +
":" +
minute +
":" +
second;
break;
case "hh:MM:ss":
res = hour + ":" + minute + ":" + second;
break;
case "yyyy":
res = year;
break;
case "mm":
res = month;
break;
case "dd":
res = day;
break;
case "hh":
res = hour;
break;
case "MM":
res = minute;
break;
case "ss":
res = second;
break;
case "mm-dd":
res = month + "-" + day;
break;
default:
res = "参数错误";
break;
}
return res;
};
/**
* 将时间按照所传入的时间格式进行转换
* @param {string} value 日期
* @param {string} formatStr 日期格式
* @return {string} 格式化日期
*/
const dateFormat = function(value, formatStr = "yyyy-mm-dd") {
const date = new Date(value);
const year = date.getFullYear(),
month = zero(date.getMonth() + 1),
day = zero(date.getDate()),
hour = zero(date.getHours()),
minute = zero(date.getMinutes()),
second = zero(date.getSeconds());
let res = "";
switch (formatStr) {
case "yyyy-mm-dd":
res = year + "-" + month + "-" + day;
break;
case "mm-dd-yyyy":
res = month + "-" + day + "-" + year;
break;
case "yyyy-mm-dd hh:MM:ss":
res =
year +
"-" +
month +
"-" +
day +
" " +
hour +
":" +
minute +
":" +
second;
break;
case "hh:MM:ss":
res = hour + ":" + minute + ":" + second;
break;
case "yyyy":
res = year;
break;
case "mm":
res = month;
break;
case "dd":
res = day;
break;
case "hh":
res = hour;
break;
case "MM":
res = minute;
break;
case "ss":
res = second;
break;
case "mm-dd":
res = month + "-" + day;
break;
default:
res = "参数错误";
break;
}
return res;
};
可以获取指定日期的上一天日期,如2021-01-01的上一天为2020-12-31
/**
* 获取上一天日期
* @param {string} str 当前日期
* @return {string} 上一天日期
*/
const getYesterday = function(str) {
let date = str.split("-");
let year = parseInt(date[0]),
month = parseInt(date[1]),
day = parseInt(date[2]);
if (month > 12 || month < 1 || day > getMonthDays(year, month))
return "日期不合法";
day -= 1;
if (day > 0) {
return year + "-" + zero(month) + "-" + zero(day);
}
month -= 1;
if (month > 0) {
return year + "-" + zero(month) + "-" + getMonthDays(year, month);
}
year -= 1;
return year + "-" + 12 + "-" + getMonthDays(year, 12);
};
可以获取指定日期的上一天日期,如2020-12-31的下一天为2021-01-01
/**
* 获取下一天日期
* @param {string} str 当前日期
* @return {string} 下一天日期
*/
const getTomorrow = function(str) {
let date = str.split("-");
let year = parseInt(date[0]),
month = parseInt(date[1]),
day = parseInt(date[2]);
if (month > 12 || month < 1 || day > getMonthDays(year, month))
return "日期不合法";
day += 1;
if (day <= getMonthDays(year, month)) {
return year + "-" + zero(month) + "-" + zero(day);
}
month += 1;
if (month < 13) {
return year + "-" + zero(month) + "-" + "01";
}
year += 1;
return year + "-" + "01" + "-" + "01";
};
为获取上一天日期的扩展,这里简单的循环获取上一天来获取前n天日期
/**
* 获取前n天日期
* @param {string} n 当前日期
* @return {string} 前n天日期
*/
const beforeDay = function(date, n) {
if (date.split("-").length < 3) return "日期格式错误";
let res = dateFormat(date);
n = parseInt(n);
while (n--) {
res = getYesterday(res);
}
return res;
};
为获取下一天日期的扩展,这里简单的循环获取下吧一天来获取后n天日期
/**
* 获取后n天日期
* @param {string} n 当前日期
* @return {string} 后n天日期
*/
const afterDay = function(date, n) {
if (date.split("-").length < 3) return "日期格式错误";
let res = dateFormat(date);
while (n--) {
res = getTomorrow(res);
}
return res;
};