You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
3.7 KiB
163 lines
3.7 KiB
export const toDate = function(date) {
|
|
return isDate(date) ? new Date(date) : null;
|
|
};
|
|
|
|
export const isDate = function(date) {
|
|
if (date === null || date === undefined) return false;
|
|
if (isNaN(new Date(date).getTime())) return false;
|
|
if (Array.isArray(date)) return false;
|
|
return true;
|
|
};
|
|
|
|
export const isDateObject = function(val) {
|
|
return val instanceof Date;
|
|
};
|
|
// 判断当月有多少天
|
|
export const daysInMonth = (year, month) => {
|
|
return /8|3|5|10/.test(month) ?
|
|
30 :
|
|
month === 1 ?
|
|
(!(year % 4) && year % 100) || !(year % 400) ?
|
|
29 :
|
|
28 :
|
|
31;
|
|
};
|
|
|
|
/* 判断是否为同一天 */
|
|
export const compareDates = (date1, date2) => {
|
|
|
|
const d1 = new Date(date1.getTime());
|
|
// #ifdef MP-WEIXIN
|
|
date2 = new Date(Date.parse(date2));
|
|
// #endif
|
|
const d2 = new Date(date2.getTime());
|
|
|
|
d1.setHours(0, 0, 0, 0);
|
|
d2.setHours(0, 0, 0, 0);
|
|
return d1.getTime() === d2.getTime();
|
|
|
|
};
|
|
/* 判断是否是日期 */
|
|
export const isValidDate = (date) => {
|
|
if (Object.prototype.toString.call(date) !== "[object Date]") {
|
|
return false;
|
|
}
|
|
return !isNaN(date.getTime());
|
|
};
|
|
/* 格式化时间*/
|
|
export const parseTime = (time, fmt = "yyyy-MM-dd hh:mm:ss") => {
|
|
if (time === undefined) {
|
|
return "--";
|
|
}
|
|
let date = null;
|
|
if (Object.prototype.toString.call(time) === "[object Date]") {
|
|
date = time;
|
|
} else if (Object.prototype.toString.call(time) !== "[object String]") {
|
|
date = new Date(time);
|
|
}
|
|
if (date) {
|
|
if (/(y+)/.test(fmt)) {
|
|
fmt = fmt.replace(
|
|
RegExp.$1,
|
|
(date.getFullYear() + "").substr(4 - RegExp.$1.length)
|
|
);
|
|
}
|
|
const o = {
|
|
"M+": date.getMonth() + 1,
|
|
"d+": date.getDate(),
|
|
"h+": date.getHours(),
|
|
"m+": date.getMinutes(),
|
|
"s+": date.getSeconds(),
|
|
};
|
|
for (const k in o) {
|
|
if (new RegExp(`(${k})`).test(fmt)) {
|
|
const str = o[k] + "";
|
|
fmt = fmt.replace(
|
|
RegExp.$1,
|
|
RegExp.$1.length === 1 ? str : padLeftZero(str)
|
|
);
|
|
}
|
|
}
|
|
return fmt;
|
|
} else {
|
|
return "";
|
|
}
|
|
};
|
|
|
|
const padLeftZero = (str) => {
|
|
return ("00" + str).substr(str.length);
|
|
};
|
|
/* 根据某个日期 返回这个月的日期,一共 6 * 7 = 42个日期的数组*/
|
|
export const getDateList = (d = new Date(), firstDay = 1) => {
|
|
|
|
let dObj = new Date(
|
|
d.getFullYear(),
|
|
d.getMonth(),
|
|
1,
|
|
d.getHours(),
|
|
d.getMinutes()
|
|
);
|
|
// #ifdef MP-WEIXIN
|
|
dObj = new Date(Date.parse(dObj));
|
|
// #endif
|
|
let daysInMon = daysInMonth(dObj.getFullYear(), dObj.getMonth());
|
|
let days = [];
|
|
/* 上月日期*/
|
|
const oneIndex = dObj.getDay(); // 本月一号是周几
|
|
let preNum = oneIndex; // 上个月的日期有多少天
|
|
if (firstDay === 1) {
|
|
preNum = oneIndex - 1;
|
|
} else if (firstDay && oneIndex === 0) {
|
|
preNum = 6;
|
|
}
|
|
for (let i = 0; i < preNum; i++) {
|
|
const tempobj = new Date(
|
|
d.getFullYear(),
|
|
d.getMonth(),
|
|
1 - (preNum - i),
|
|
0,
|
|
0
|
|
);
|
|
days.push({
|
|
date: tempobj.getDate(),
|
|
timestamp: tempobj.getTime(),
|
|
isPreMonth: true,
|
|
isNextMonth: false,
|
|
isToday: compareDates(tempobj, new Date()),
|
|
dateObj: tempobj,
|
|
isHighlight: false,
|
|
isDot: false,
|
|
});
|
|
}
|
|
/* 当月日期*/
|
|
for (let i = 0; i < daysInMon; i++) {
|
|
days.push({
|
|
date: dObj.getDate(),
|
|
timestamp: dObj.getTime(),
|
|
isPreMonth: false,
|
|
isNextMonth: false,
|
|
isToday: compareDates(dObj, new Date()),
|
|
dateObj: new Date(dObj.getTime()),
|
|
isHighlight: false,
|
|
isDot: false,
|
|
});
|
|
dObj.setDate(dObj.getDate() + 1);
|
|
}
|
|
// 下月日期
|
|
const nextdays = 42 - (preNum + daysInMon);
|
|
|
|
for (let i = 0; i < nextdays; i++) {
|
|
const tempobj = new Date(d.getFullYear(), d.getMonth() + 1, 1 + i, 0, 0);
|
|
days.push({
|
|
date: tempobj.getDate(),
|
|
timestamp: tempobj.getTime(),
|
|
isPreMonth: false,
|
|
isNextMonth: true,
|
|
isToday: compareDates(tempobj, new Date()),
|
|
dateObj: tempobj,
|
|
isHighlight: false,
|
|
isDot: false,
|
|
});
|
|
}
|
|
return days;
|
|
};
|
|
|