数通智联化工云平台
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.

451 lines
13 KiB

1 year ago
import constValue from '@/api/calendar/const';
import { clockFactory } from '@/api/calendar/utils';
import config from '@/api/calendar/config';
1 year ago
export const dayArr = [ '一', '二', '三', '四', '五', '六','日'];
// export const dayArr = ['日', '一', '二', '三', '四', '五', '六'];
1 year ago
/**
*
*/
class DateClass {
getWeek(week: number) {
return `星期${dayArr[week]}`;
}
getCurrent() {
const date = new Date();
return [date.getFullYear(), date.getMonth() + 1, date.getDate()];
}
changeTimeStr(time: string) {
return time.split('-').map((el) => Number(el));
}
getCurrentStr(isZero: boolean = false) {
const date = new Date();
return isZero
? date.getFullYear() +
'-' +
clockFactory(date.getMonth() + 1) +
'-' +
clockFactory(date.getDate())
: date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
}
getHolidays(date: number[]) {
return (
config.Holidays.indexOf(`${date[0]}${clockFactory(date[1])}${clockFactory(date[2])}`) >
-1
);
1 year ago
}
getWorks(date: number[]) {
1 year ago
// console.log("日清杀杀杀",`${date[0]}${clockFactory(date[1])}${clockFactory(date[2])}`)
// console.log("日清杀杀杀--》",config.Works.indexOf(`${date[0]}${clockFactory(date[1])}${clockFactory(date[2])}`))
// console.log("日清杀杀杀--》",(
// config.Works.indexOf(`${date[0]}${clockFactory(date[1])}${clockFactory(date[2])}`) >
// -1
// ))
1 year ago
return (
config.Works.indexOf(`${date[0]}${clockFactory(date[1])}${clockFactory(date[2])}`) >
-1
);
1 year ago
}
/**
*
* @param {number} y
* @param {number} m
* @returns {number}
*/
solarMonth(y: number, m: number, d?: number) {
if (m == 2) return (y % 4 == 0 && y % 100 != 0) || y % 400 == 0 ? 29 : 28;
return constValue.solarMonth[m - 1];
}
/**
*
* @param {number} y
* @param {number} m
* @returns {number} [0-6]
*/
solarWeeks(y: number, m: number) {
return this.solarWeek(y, m, 1);
}
/**
*
* @param {number} y
* @param {number} m
* @param {number} d
* @returns {number} [0-6]
*/
solarWeek(y: number, m: number, d: number) {
let date = new Date(y, m - 1, d);
1 year ago
let week = date.getDay()-1;
if(week < 0){
week = 6
}
// console.log("获取公历某一天是星期几",y, m ,date,week,week < 0)
1 year ago
return week;
}
/**
*
* @param {number} m
* @returns {string} '正月'
*/
toChinaMonth(m: number) {
let r = String(m).slice(0, 1) == '0';
return r
? '\u95f0' + constValue.nStr3[m - 1] + '\u6708'
: constValue.nStr3[m - 1] + '\u6708'; // 加上"月"字
}
/**
*
* @param {number} d
* @returns {string}
*/
toChinaDay(d: number) {
let str = d == 10 ? constValue.nStr2[0] : constValue.nStr2[Math.floor(d / 10)];
1 year ago
return str + (d % 10 ? constValue.nStr5[d % 10] : constValue.nStr5[10]);
1 year ago
}
/**
*
* @param {number} y
* @returns {string}
*/
getAnimal(y: number) {
return constValue.Animals[(y - 4) % 12];
}
/**
*
* @param {number} m
* @param {number} d
* @returns {string}
*/
toAstro(y: number, m: number, d: number) {
let s =
'\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf';
let arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22];
let i = m * 2 - (d < arr[m - 1] ? 2 : 0);
return s.slice(i, i + 2) + '\u5ea7';
}
/**
*
* @param {number} y
* @param {number} m
* @param {number} d
* @returns {string} ,0
*/
getLunars(y: number, m: number, d: number) {
let date = new Date(y, m - 1, d),
i,
leap = 0,
temp = 0;
let offset = (Date.UTC(y, m - 1, d) - Date.UTC(1900, 0, 31)) / 86400000;
for (i = 1900; i < 2101 && offset > 0; i++) {
temp = this.lYearDays(i);
offset -= temp;
}
if (offset < 0) {
offset += temp;
i--;
}
// 获取闰月
let year = i;
leap = this.leapMonth(i);
let isLeap = false;
// 校验闰月
for (i = 1; i < 13 && offset > 0; i++) {
if (leap > 0 && i == leap + 1 && !isLeap) {
--i;
isLeap = true;
temp = this.leapDays(year); // 闰月天数
} else {
temp = this.monthDays(year, i); // 普通月天数
}
if (isLeap && i == leap + 1) isLeap = false;
offset -= temp;
}
if (offset == 0 && leap > 0 && i == leap + 1) {
if (isLeap) {
isLeap = false;
} else {
isLeap = true;
--i;
}
}
if (offset < 0) {
offset += temp;
--i;
}
// 农历月
let month = isLeap ? '0' + i : i;
// 农历日
let day = ++offset;
return year + '-' + month + '-' + day;
}
/**
* 0
* @param {number} y
* @returns {number} 0
*/
leapMonth(y: number, m?: number, d?: number) {
return constValue.lunarInfo[y - 1900] & 0xf;
}
/**
* 0
* @param {number} y
* @returns {number} 0
*/
leapDays(y: number, m?: number, d?: number) {
return this.leapMonth(y, m, d) ? (constValue.lunarInfo[y - 1900] & 0x10000 ? 30 : 29) : 0;
}
/**
*
* @param {number} m
* @param {number} d
* @returns {string | boolean} false
*/
getSolarDay(m: number, d: number) {
let solarDay: false | string = false;
for (let i = 0; i < constValue.sFtv.length; i++) {
if (
parseInt(constValue.sFtv[i].slice(0, 2)) == m &&
parseInt(constValue.sFtv[i].slice(2, 4)) == d
) {
solarDay = constValue.sFtv[i].slice(5);
}
}
return solarDay;
}
/**
*
* @param {number} y
* @param {number|string} m 07
* @param {number} d
* @returns {string|false} false
*/
getlunarDay(y: number, m: number, d: number) {
if (String(m).slice(0, 1) == '0') return false; //如果是闰月则没有节日
let lunarDay: false | string = false;
for (let i = 0; i < constValue.lFtv.length; i++) {
if (
parseInt(constValue.lFtv[i].slice(0, 2)) == m &&
parseInt(constValue.lFtv[i].slice(2, 4)) == d
) {
lunarDay = constValue.lFtv[i].slice(5);
}
}
// 判断是否为除夕
if (m == 12 && this.monthDays(y, m, d) == d) lunarDay = '除夕';
return lunarDay;
}
/**
*
* @param {number} y
* @returns {number}
*/
lYearDays(y: number, m?: number, d?: number) {
let i,
sum = 348;
for (i = 0x8000; i > 0x8; i >>= 1) {
sum += constValue.lunarInfo[y - 1900] & i ? 1 : 0;
}
return sum + this.leapDays(y);
}
/**
*
* @param {number} y
* @param {number} m
* @returns {number}
*/
monthDays(y: number, m: number, d?: number) {
return constValue.lunarInfo[y - 1900] & (0x10000 >> m) ? 30 : 29;
}
/**
* n个节气日期
* @param {number} y
* @param {number} n
* @returns {string} ,0506
*/
getTerm(y: number, n: number) {
let _table = constValue.sTermInfo[y - 1900];
let _info = [
parseInt('0x' + _table.slice(0, 5)).toString(),
parseInt('0x' + _table.slice(5, 10)).toString(),
parseInt('0x' + _table.slice(10, 15)).toString(),
parseInt('0x' + _table.slice(15, 20)).toString(),
parseInt('0x' + _table.slice(20, 25)).toString(),
parseInt('0x' + _table.slice(25)).toString()
];
let d = [
_info[0].slice(0, 1),
_info[0].slice(1, 3),
_info[0].slice(3, 4),
_info[0].slice(4, 6),
_info[1].slice(0, 1),
_info[1].slice(1, 3),
_info[1].slice(3, 4),
_info[1].slice(4, 6),
_info[2].slice(0, 1),
_info[2].slice(1, 3),
_info[2].slice(3, 4),
_info[2].slice(4, 6),
_info[3].slice(0, 1),
_info[3].slice(1, 3),
_info[3].slice(3, 4),
_info[3].slice(4, 6),
_info[4].slice(0, 1),
_info[4].slice(1, 3),
_info[4].slice(3, 4),
_info[4].slice(4, 6),
_info[5].slice(0, 1),
_info[5].slice(1, 3),
_info[5].slice(3, 4),
_info[5].slice(4, 6)
];
return d[n - 1];
}
1 year ago
/**
@ 作者: 秦东
@ 时间: 2024-07-12 13:11:32
@ 功能: 判断公立是不是闰年
*/
isLeapYear(year: number): boolean {
return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);
}
/**
@ 作者: 秦东
1 year ago
@ 时间: 2024-07-15 09:00:20
@ 功能: 前进时间
@ 1: 23
*/
moveTime(y: number, m: number, d: number,t?:number){
switch(t){
case 2:
break;
case 3:
break;
default:
let month = m + 1
if(month > 12){
y = y + 1;
m = 1
d = this.solarMonth(y,m)
}else{
m = month
let day = this.solarMonth(y,month)
if(d > day){
d = day
}
}
return [y,m,d]
}
}
/**
@ 作者: 秦东
1 year ago
@ 时间: 2024-07-12 11:50:37
@ 功能: 处理年月日回退数据
@ 1: 23
*/
gobackTime(y: number, m: number, d: number,t?:number){
1 year ago
// console.log("计算时间--0--》",y,m,d,t)
1 year ago
switch(t){
case 2:
1 year ago
let startWeek = this.getMonday(y,m,d,'s',-1)
let endWeek = this.getMonday(y,m,d,'e',-1)
1 year ago
return {
start:startWeek,
end:endWeek
}
break;
case 3:
let day = d-1
if(day <= 0){
let month = m - 1
if(month <= 0){
y = y -1;
m = 12
d = this.solarMonth(y,m)
}else{
m = month
d = this.solarMonth(y,month)
}
}else{
d = day
}
return [y,m,d]
break;
default:
let month = m - 1
if(month <= 0){
y = y -1;
m = 12
d = this.solarMonth(y,m)
console.log("计算时间--1--》",y,m,d)
}else{
m = month
let day = this.solarMonth(y,month)
if(d > day){
d = day
}
}
return [y,m,d]
break;
}
}
/**
@ 作者: 秦东
@ 时间: 2024-07-12 13:48:55
1 year ago
@ 功能: 任意日期获取周
1 year ago
*/
getMonday = (year: number, month: number, taday: number,type: any, dates: any) => {
// let now = new Date();
// let nowTime = now.getTime();
let dateStr = year + "-" + month + "-" + taday; // 要转换的日期字符串
// let nowTime = Date.parse(dateStr);
let now = new Date(dateStr);
let nowTime = now.getTime();
let day = now.getDay();
let longTime = 24 * 60 * 60 * 1000;
let n = longTime * 7 * (dates || 0);
let date: any = ''
1 year ago
// console.log("now--->",now)
// console.log("nowTime--->",nowTime)
// console.log("day--->",day)
// console.log("longTime--->",longTime)
// console.log("n--->",n)
1 year ago
if (type == "s") {
date = nowTime - (day - 1) * longTime + n;
};
if (type == "e") {
date = nowTime + (7 - day) * longTime + n;
};
date = new Date(date);
let y: any = date.getFullYear();
let m: any = date.getMonth() + 1;
let d: any = date.getDate();
// m = m < 10 ? "0" + m : m;
// d = d < 10 ? "0" + d : d;
let days = y + "-" + m + "-" + d;
return [y, m, d];
}
1 year ago
//获得上周的开始日期
// getLastWeekStartDate()
1 year ago
}
export default new DateClass();