@visactor/vtable-gantt 1.22.11-alpha.8 → 1.22.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/tools/util.js +2 -1
- package/cjs/tools/util.js.map +1 -1
- package/dist/vtable-gantt.js +242 -360
- package/dist/vtable-gantt.min.js +2 -2
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/tools/util.js +2 -1
- package/es/tools/util.js.map +1 -1
- package/package.json +6 -6
package/cjs/index.d.ts
CHANGED
|
@@ -6,5 +6,5 @@ import * as tools from './tools';
|
|
|
6
6
|
import * as VRender from './vrender';
|
|
7
7
|
import * as VTable from './vtable';
|
|
8
8
|
import * as plugins from './plugins';
|
|
9
|
-
export declare const version = "1.22.11
|
|
9
|
+
export declare const version = "1.22.11";
|
|
10
10
|
export { TYPES, GanttConstructorOptions, Gantt, ColumnsDefine, ColumnDefine, LinkColumnDefine, ChartColumnDefine, ImageColumnDefine, SparklineColumnDefine, ProgressbarColumnDefine, TextColumnDefine, GroupColumnDefine, TextAlignType, TextBaselineType, tools, VRender, VTable, plugins };
|
package/cjs/index.js
CHANGED
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAAoC;AAwBlC,sBAAK;AAVP,mCAAgC;AAY9B,sFAZO,aAAK,OAYP;AAXP,+CAAiC;AAuB/B,sBAAK;AAtBP,mDAAqC;AAuBnC,0BAAO;AAtBT,iDAAmC;AAuBjC,wBAAM;AAtBR,mDAAqC;AAuBnC,0BAAO;AAtBI,QAAA,OAAO,GAAG,
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAAoC;AAwBlC,sBAAK;AAVP,mCAAgC;AAY9B,sFAZO,aAAK,OAYP;AAXP,+CAAiC;AAuB/B,sBAAK;AAtBP,mDAAqC;AAuBnC,0BAAO;AAtBT,iDAAmC;AAuBjC,wBAAM;AAtBR,mDAAqC;AAuBnC,0BAAO;AAtBI,QAAA,OAAO,GAAG,SAAS,CAAC","file":"index.js","sourcesContent":["import type { GanttConstructorOptions } from './ts-types';\nimport * as TYPES from './ts-types';\nimport type {\n ColumnDefine,\n ColumnsDefine,\n LinkColumnDefine,\n ChartColumnDefine,\n ImageColumnDefine,\n SparklineColumnDefine,\n ProgressbarColumnDefine,\n TextColumnDefine,\n GroupColumnDefine,\n TextAlignType,\n TextBaselineType\n} from '@visactor/vtable';\nimport { Gantt } from './Gantt';\nimport * as tools from './tools';\nimport * as VRender from './vrender';\nimport * as VTable from './vtable';\nimport * as plugins from './plugins';\nexport const version = \"1.22.11\";\n/**\n * @namespace VTableGantt\n */\nexport {\n TYPES,\n GanttConstructorOptions,\n Gantt,\n ColumnsDefine,\n ColumnDefine,\n LinkColumnDefine,\n ChartColumnDefine,\n ImageColumnDefine,\n SparklineColumnDefine,\n ProgressbarColumnDefine,\n TextColumnDefine,\n GroupColumnDefine,\n TextAlignType,\n TextBaselineType,\n tools,\n VRender,\n VTable,\n plugins\n};\n"]}
|
package/cjs/tools/util.js
CHANGED
|
@@ -337,8 +337,9 @@ function computeCountToTimeScale(date, startDate, timeScale, step, diffMS = 0) {
|
|
|
337
337
|
break;
|
|
338
338
|
|
|
339
339
|
case "month":
|
|
340
|
+
const startDaysInMonth = new Date(startDate.getFullYear(), startDate.getMonth() + 1, 0).getDate(), adjustedDaysInMonth = new Date(adjusted_date.getFullYear(), adjusted_date.getMonth() + 1, 0).getDate();
|
|
340
341
|
difference = 12 * (adjusted_date.getFullYear() - startDate.getFullYear()) + (adjusted_date.getMonth() - startDate.getMonth()),
|
|
341
|
-
difference +=
|
|
342
|
+
difference += adjusted_date.getDate() / adjustedDaysInMonth - startDate.getDate() / startDaysInMonth;
|
|
342
343
|
break;
|
|
343
344
|
|
|
344
345
|
case "quarter":
|
package/cjs/tools/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import { isValid } from '@visactor/vutils';\nimport { DayTimes } from '../gantt-helper';\n\n/**\n * throttle 保障了首次立即执行 后续触发的回调执行间隔delay时间 区别于throttle2 最后执行时机会提前\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n func.apply(this, args); //先执行函数,保证第一次立即执行\n timer = setTimeout(() => {\n timer = null;\n }, delay);\n }\n // console.log('throttle');\n // 当我们第一次触发事件,定时器不存在时就执行函数,当我们再次点击时,因为定时器存在,\n // 所以无法再进入函数调用(无论事件如何执行),那么只能等定时器事件结束,\n // 我们让timer=null,回到第一次的状态,就又重新开始新的一轮\n };\n}\n/**\n * throttle节流 间隔delay时间后执行 保障了最后执行时机是在delay之后\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle2(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n timer = setTimeout(() => {\n func.apply(this, args);\n timer = null;\n }, delay);\n }\n };\n}\n// export function parseDateFormat(dateString: string) {\n// const formats = [\n// 'yyyy-mm-dd',\n// 'dd-mm-yyyy',\n// 'mm/dd/yyyy',\n// 'yyyy/mm/dd',\n// 'dd/mm/yyyy',\n// 'yyyy.mm.dd',\n// 'dd.mm.yyyy',\n// 'mm.dd.yyyy'\n// ];\n// const separatorsInDate = dateString.match(/[^\\w]/g);\n// for (let i = 0; i < formats.length; i++) {\n// const format = formats[i];\n// const separators = format.match(/[^\\w]/g);\n// let isValidFormat = true;\n// for (let j = 0; j < separators.length; j++) {\n// const part = separators[j];\n// if (part !== separatorsInDate[j]) {\n// isValidFormat = false;\n// break;\n// }\n// }\n// if (isValidFormat) {\n// return format;\n// }\n// }\n\n// return null;\n// }\n\n// export function parseDate(dateString, format) {\n// // 根据解析出的格式将 dateString 解析为日期对象\n// // 这里只是一个示例,假设解析格式为 \"yyyy-mm-dd\"\n// const parts = dateString.split('-');\n// const year = parseInt(parts[0], 10);\n// const month = parseInt(parts[1], 10) - 1;\n// const day = parseInt(parts[2], 10);\n// return new Date(year, month, day);\n// }\nexport function getTodayNearDay(dayOffset: number, format?: string) {\n const today = new Date();\n const todayTime = today.getTime();\n const oneDayTime = 24 * 60 * 60 * 1000;\n const targetTime = todayTime + dayOffset * oneDayTime;\n const date = new Date(targetTime);\n if (format) {\n const year = date.getFullYear().toString();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n format = format.replace('yyyy', year);\n format = format.replace('mm', month);\n format = format.replace('dd', day);\n return format;\n }\n return date;\n}\n\nexport function formatDate(date: Date, format: string) {\n const year = date.getFullYear().toString();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n\n format = format.replace('yyyy', year);\n format = format.replace('mm', month);\n format = format.replace('dd', day);\n if (format.length > 10) {\n const hour = date.getHours().toString().padStart(2, '0');\n const minute = date.getMinutes().toString().padStart(2, '0');\n const second = date.getSeconds().toString().padStart(2, '0');\n\n format = format.replace('hh', hour);\n format = format.replace('mm', minute);\n format = format.replace('ss', second);\n }\n\n return format;\n}\n\n// 修正后的 validateDate 函数\nfunction validateDate(dateParts: string[], format: string) {\n // 根据格式确定年、月、日的索引\n const yearIndex = format.indexOf('yyyy');\n const monthIndex = format.indexOf('mm');\n const dayIndex = format.indexOf('dd');\n const dateYearIndex = yearIndex < monthIndex ? (yearIndex < dayIndex ? 0 : 1) : monthIndex < dayIndex ? 1 : 2;\n const dateMonthIndex = monthIndex < yearIndex ? (monthIndex < dayIndex ? 0 : 1) : monthIndex < dayIndex ? 1 : 2;\n const dateDayIndex = dayIndex < yearIndex ? (dayIndex < monthIndex ? 0 : 1) : dayIndex < monthIndex ? 1 : 2;\n // 解析年、月、日\n const year = parseInt(dateParts[dateYearIndex], 10);\n const month = parseInt(dateParts[dateMonthIndex], 10) - 1; // 月份从0开始\n const day = parseInt(dateParts[dateDayIndex], 10);\n\n // 检查年份是否有效\n if (isNaN(year) || year < 1) {\n return false;\n }\n\n // 检查月份是否有效\n if (isNaN(month) || month < 0 || month > 11) {\n return false;\n }\n\n // 检查日期是否有效\n // 每个月的天数不同,需要考虑闰年\n const daysInMonth = [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (isNaN(day) || day < 1 || day > daysInMonth[month]) {\n return false;\n }\n\n return true;\n}\n// 修正后的 validateDate 函数\nfunction validateTime(dateParts: string[], format: string) {\n // 如果格式包含时分秒,则进一步解析和验证\n if (format.includes('hh') || format.includes('mm') || format.includes('ss')) {\n const timeIndex = format.indexOf('hh') > -1 ? format.indexOf('hh') : format.indexOf('HH');\n const hour = parseInt(dateParts[timeIndex], 10);\n const minute = parseInt(dateParts[timeIndex + 1], 10);\n const second = dateParts.length > timeIndex + 2 ? parseInt(dateParts[timeIndex + 2], 10) : 0;\n\n if (isNaN(hour) || hour < 0 || hour > 23) {\n return false;\n }\n\n if (isNaN(minute) || minute < 0 || minute > 59) {\n return false;\n }\n\n if (isNaN(second) || second < 0 || second > 59) {\n return false;\n }\n }\n\n return true;\n}\n// 辅助函数,用于判断是否为闰年\nfunction isLeapYear(year: number) {\n // 能被4整除且不能被100整除,或者能被400整除的年份是闰年\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\n\n// // 修正后的 parseDateFormat 函数\n// export function parseDateFormat(dateString: string) {\n// const formats = [\n// 'yyyy-mm-dd',\n// 'dd-mm-yyyy',\n// 'mm/dd/yyyy',\n// 'yyyy/mm/dd',\n// 'dd/mm/yyyy',\n// 'yyyy.mm.dd',\n// 'mm.dd.yyyy',\n// 'dd.mm.yyyy'\n// ];\n// dateString = dateString.replace(/\\s+/g, ''); // 移除空格\n// for (let i = 0; i < formats.length; i++) {\n// const format = formats[i];\n// const dateParts = dateString.split(getSeparator(format));\n// const isValid = validateDate(dateParts, format);\n// if (dateParts.length === 3 && isValid) {\n// return format;\n// }\n// }\n// return null;\n// }\n\n// 修正后的 parseDateFormat 函数\nexport function parseDateFormat(dateString: string) {\n const formats = [\n 'yyyy-mm-dd',\n 'dd-mm-yyyy',\n 'mm/dd/yyyy',\n 'yyyy/mm/dd',\n 'dd/mm/yyyy',\n 'yyyy.mm.dd',\n 'mm.dd.yyyy',\n 'dd.mm.yyyy'\n ];\n const timeFormat = ['hh:mm:ss', 'hh:mm'];\n dateString = dateString.trim(); // 移除空格\n const dates = dateString.split(' ');\n const date = dates[0];\n const time = dates[1];\n let dateFormatMatched;\n let timeFormatMatched;\n if (date) {\n for (let i = 0; i < formats.length; i++) {\n const format = formats[i];\n const dateParts = date.split(getSeparator(format));\n const isValid = validateDate(dateParts, format);\n if (dateParts.length === 3 && isValid) {\n dateFormatMatched = format;\n break;\n }\n }\n }\n if (dateFormatMatched) {\n if (time) {\n for (let i = 0; i < timeFormat.length; i++) {\n const format = timeFormat[i];\n const timeParts = time.split(getSeparator(format));\n const formatParts = format.split(getSeparator(format));\n const isValid = validateTime(timeParts, format);\n if (isValid && timeParts.length === formatParts.length) {\n timeFormatMatched = format;\n break;\n }\n }\n }\n }\n if (date && time && dateFormatMatched && timeFormatMatched) {\n return dateFormatMatched + ' ' + timeFormatMatched;\n }\n if (date && !time) {\n return dateFormatMatched;\n }\n return 'yyyy-mm-dd hh:mm:ss';\n}\n\n// 根据日期格式获取分隔符正则表达式\nfunction getSeparator(format: string) {\n // 找到日期格式中的分隔符\n const separators = format.match(/[^\\w]/g);\n if (separators) {\n // 转义分隔符,以确保正则表达式正确处理特殊字符\n const escapedSeparators = separators.map(s => '\\\\' + s).join('|');\n return new RegExp(escapedSeparators, 'g');\n }\n return /[^\\w]/;\n}\n\nexport function parseStringTemplate(template: string, data: any) {\n const result = template.replace(/\\{([^}]+)\\}/g, (match, key) => {\n const keys = key.split('.');\n let value = data;\n\n for (const k of keys) {\n if (value.hasOwnProperty(k)) {\n value = value[k];\n } else {\n value = match; // 如果找不到对应的字段值,保持原样\n break;\n }\n }\n\n return value;\n });\n return result;\n}\n\nexport function toBoxArray<T>(obj: T | T[]): [T, T, T, T] {\n if (!Array.isArray(obj)) {\n return [obj /*top*/, obj /*right*/, obj /*bottom*/, obj /*left*/];\n }\n if (obj.length === 3) {\n return [obj[0] /*top*/, obj[1] /*right*/, obj[2] /*bottom*/, obj[1] /*left*/];\n }\n if (obj.length === 2) {\n return [obj[0] /*top*/, obj[1] /*right*/, obj[0] /*bottom*/, obj[1] /*left*/];\n }\n if (obj.length === 1) {\n return [obj[0] /*top*/, obj[0] /*right*/, obj[0] /*bottom*/, obj[0] /*left*/];\n }\n // return obj as [T, T, T, T];//原先这种返回方式,会造成修改引用问题\n return [obj[0] /*top*/, obj[1] /*right*/, obj[2] /*bottom*/, obj[3] /*left*/];\n}\n\nexport function getWeekNumber(currentDate: Date) {\n // Calculate the week number within the year\n const startOfYear = new Date(currentDate.getFullYear(), 0, 1);\n // 以下代码的第一个 +1 是为了处理currentDate正好是一周当中的第一天0点0分0秒的情况 ;第2个 +1 是天索引从0开始的缘故\n const weekNumber = Math.ceil(((currentDate.getTime() + 1 - startOfYear.getTime()) / 86400000 + 1) / 7);\n return weekNumber;\n}\n\nexport function getWeekday(dateString: string | Date, format: 'long' | 'short' = 'long') {\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const date = new Date(dateString);\n\n if (format === 'short') {\n return days[date.getDay()].substr(0, 3);\n } else if (format === 'long') {\n return days[date.getDay()];\n }\n return 'Invalid format specified. Please use \"short\" or \"long\".';\n}\n/** 判断对象的属性是否可写 */\nexport function isPropertyWritable(obj: any, prop: string | number) {\n const descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n if (!descriptor) {\n // 属性不存在\n return false;\n }\n\n // 检查是否有 setter 方法或 writable 属性为 true\n return !!descriptor.set || descriptor.writable === true;\n}\n\n/** 创建日期 */\nexport function createDateAtMidnight(dateStr?: string | number | Date, forceMidnight: boolean = false): Date {\n let date;\n if (dateStr) {\n date = new Date(dateStr);\n if (typeof dateStr === 'string') {\n if (dateStr.length > 10) {\n if (forceMidnight) {\n date.setHours(0, 0, 0, 0);\n }\n // 如果 dateStr 是字符串类型且包含时分秒,不需要设置为午夜\n return date;\n }\n date.setHours(0, 0, 0, 0);\n }\n } else {\n date = new Date();\n }\n if (forceMidnight) {\n date.setHours(0, 0, 0, 0);\n }\n return date;\n}\nexport function createDateAtLastMinute(dateStr?: string | number | Date, forceSetMinute: boolean = false): Date {\n let date;\n if (dateStr) {\n date = new Date(dateStr);\n if (typeof dateStr === 'string') {\n if (dateStr.length > 10) {\n if (forceSetMinute) {\n date.setMinutes(59, 59, 999);\n }\n // 如果 dateStr 是字符串类型且包含时分秒,不需要设置为午夜\n return date;\n }\n date.setMinutes(59, 59, 999);\n }\n } else {\n date = new Date();\n }\n if (forceSetMinute) {\n date.setMinutes(59, 59, 999);\n }\n return date;\n}\n\nexport function createDateAtLastSecond(dateStr?: string | number | Date, forceSetSecond: boolean = false): Date {\n let date;\n if (dateStr) {\n date = new Date(dateStr);\n if (typeof dateStr === 'string') {\n if (dateStr.length > 10) {\n if (forceSetSecond) {\n date.setSeconds(59, 999);\n }\n // 如果 dateStr 是字符串类型且包含时分秒,不需要设置为午夜\n return date;\n }\n date.setSeconds(59, 999);\n }\n } else {\n date = new Date();\n }\n if (forceSetSecond) {\n date.setSeconds(59, 999);\n }\n return date;\n}\n\nexport function createDateAtLastMillisecond(\n dateStr?: string | number | Date,\n forceSetMillisecond: boolean = false\n): Date {\n let date;\n if (dateStr) {\n date = new Date(dateStr);\n if (typeof dateStr === 'string') {\n if (dateStr.length > 10) {\n if (forceSetMillisecond) {\n date.setMilliseconds(999);\n }\n // 如果 dateStr 是字符串类型且包含时分秒,不需要设置为午夜\n return date;\n }\n date.setMilliseconds(999);\n }\n } else {\n date = new Date();\n }\n if (forceSetMillisecond) {\n date.setMilliseconds(999);\n }\n return date;\n}\n/** 创建日期 */\nexport function createDateAtLastHour(dateStr?: string | number | Date, forceLastHour: boolean = false): Date {\n let date;\n if (dateStr) {\n date = new Date(dateStr);\n if (typeof dateStr === 'string') {\n if (dateStr.length > 10) {\n if (forceLastHour) {\n date.setHours(23, 59, 59, 999);\n }\n // 如果 dateStr 是字符串类型且包含时分秒,不需要设置为午夜\n return date;\n }\n date.setHours(23, 59, 59, 999);\n }\n } else {\n date = new Date();\n }\n if (forceLastHour) {\n date.setHours(23, 59, 59, 999);\n }\n return date;\n}\n\nexport function getEndDateByTimeUnit(\n startDate: Date,\n date: Date,\n timeScale: 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second',\n step: number\n) {\n let endDate = new Date(date);\n\n switch (timeScale) {\n case 'second':\n endDate.setMilliseconds(999);\n break;\n case 'minute':\n endDate.setSeconds(59, 999);\n break;\n case 'hour':\n endDate.setMinutes(59, 59, 999);\n break;\n case 'day':\n endDate.setHours(23, 59, 59, 999);\n break;\n case 'week':\n const day = endDate.getDay();\n const diffToEndOfWeek = 6 - day;\n endDate.setDate(endDate.getDate() + diffToEndOfWeek);\n endDate.setHours(23, 59, 59, 999);\n break;\n case 'month':\n const lastDayOfMonth = new Date(endDate.getFullYear(), endDate.getMonth() + 1, 0).getDate();\n endDate.setDate(lastDayOfMonth);\n endDate.setHours(23, 59, 59, 999);\n break;\n case 'quarter':\n const currentMonth = endDate.getMonth();\n const endMonthOfQuarter = currentMonth - (currentMonth % 3) + 2;\n const lastDayOfQuarter = new Date(endDate.getFullYear(), endMonthOfQuarter + 1, 0).getDate();\n endDate.setMonth(endMonthOfQuarter, lastDayOfQuarter);\n endDate.setHours(23, 59, 59, 999);\n break;\n case 'year':\n endDate.setMonth(11, 31);\n endDate.setHours(23, 59, 59, 999);\n break;\n default:\n throw new Error('Invalid time scale');\n }\n\n const count = computeCountToTimeScale(endDate, startDate, timeScale, step, 1);\n const targetCount = Math.ceil(count);\n if (targetCount > count) {\n const dif = (targetCount - count) * step;\n const msInSecond = 1000;\n const msInMinute = msInSecond * 60;\n const msInHour = msInMinute * 60;\n const msInDay = msInHour * 24;\n const msInWeek = msInDay * 7;\n const adjusted_date = new Date(endDate.getTime() + 1);\n switch (timeScale) {\n case 'second':\n endDate.setTime(endDate.getTime() + dif * msInSecond);\n break;\n case 'minute':\n endDate.setTime(endDate.getTime() + dif * msInMinute);\n break;\n case 'hour':\n endDate.setTime(endDate.getTime() + dif * msInHour);\n break;\n case 'day':\n endDate.setTime(endDate.getTime() + dif * msInDay);\n break;\n case 'week':\n endDate.setTime(endDate.getTime() + dif * msInWeek);\n break;\n case 'month':\n endDate = new Date(endDate.getFullYear(), endDate.getMonth() + 1 + Math.round(dif), 0);\n // endDate.setTime(lastDayOfMonth);\n endDate.setHours(23, 59, 59, 999);\n break;\n case 'quarter':\n const currentMonth = endDate.getMonth();\n const endMonthOfQuarter = currentMonth - (currentMonth % 3) + 2;\n endDate = new Date(endDate.getFullYear(), endMonthOfQuarter + Math.round(dif * 3) + 1, 0);\n endDate.setHours(23, 59, 59, 999);\n break;\n case 'year':\n endDate.setFullYear(endDate.getFullYear() + Math.floor(dif));\n endDate.setHours(23, 59, 59, 999);\n break;\n default:\n throw new Error('Invalid time scale');\n }\n }\n\n return endDate;\n}\n\n// export function getEndDateByTimeUnit(\n// startDate: Date,\n// date: Date,\n// timeScale: 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second',\n// step: number\n// ): Date {\n// const count = computeCountToTimeScale(date, startDate, timeScale, step);\n// const targetCount = Math.ceil(count);\n// debugger;\n// const endDate = new Date(startDate);\n\n// switch (timeScale) {\n// case 'second':\n// endDate.setSeconds(endDate.getSeconds() + targetCount * step);\n// endDate.setMilliseconds(999);\n// break;\n// case 'minute':\n// endDate.setMinutes(endDate.getMinutes() + targetCount * step);\n// endDate.setSeconds(59, 999);\n// break;\n// case 'hour':\n// endDate.setHours(endDate.getHours() + targetCount * step);\n// endDate.setMinutes(59, 59, 999);\n// break;\n// case 'day':\n// endDate.setDate(endDate.getDate() + targetCount * step);\n// endDate.setHours(23, 59, 59, 999);\n// break;\n// case 'week':\n// endDate.setDate(endDate.getDate() + targetCount * step * 7);\n// endDate.setHours(23, 59, 59, 999);\n// break;\n// case 'month':\n// endDate.setMonth(endDate.getMonth() + targetCount * step);\n// const lastDayOfMonth = new Date(endDate.getFullYear(), endDate.getMonth() + 1, 0).getDate();\n// endDate.setDate(lastDayOfMonth);\n// endDate.setHours(23, 59, 59, 999);\n// break;\n// case 'quarter':\n// endDate.setMonth(endDate.getMonth() + targetCount * step * 3);\n// const lastDayOfQuarter = new Date(endDate.getFullYear(), endDate.getMonth() + 1, 0).getDate();\n// endDate.setDate(lastDayOfQuarter);\n// endDate.setHours(23, 59, 59, 999);\n// break;\n// case 'year':\n// endDate.setFullYear(endDate.getFullYear() + targetCount * step);\n// endDate.setMonth(11, 31);\n// endDate.setHours(23, 59, 59, 999);\n// break;\n// default:\n// throw new Error('Invalid time scale');\n// }\n\n// return endDate;\n// }\n\nexport function getStartDateByTimeUnit(\n date: Date,\n timeScale: 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second',\n startOfWeekSetting = 'monday'\n): Date {\n const startDate = new Date(date);\n\n switch (timeScale) {\n case 'second':\n startDate.setMilliseconds(0);\n break;\n case 'minute':\n startDate.setSeconds(0, 0);\n break;\n case 'hour':\n startDate.setMinutes(0, 0, 0);\n break;\n case 'day':\n startDate.setHours(0, 0, 0, 0);\n break;\n case 'week':\n const day = startDate.getDay();\n let diffToStartOfWeek = day;\n if (startOfWeekSetting === 'monday') {\n diffToStartOfWeek = day === 0 ? -6 : 1 - day; // Adjusting for Sunday as the start of the week\n } else {\n diffToStartOfWeek = -day;\n }\n\n startDate.setDate(startDate.getDate() + diffToStartOfWeek);\n startDate.setHours(0, 0, 0, 0);\n break;\n case 'month':\n startDate.setDate(1);\n startDate.setHours(0, 0, 0, 0);\n break;\n case 'quarter':\n const currentMonth = startDate.getMonth();\n const startMonthOfQuarter = currentMonth - (currentMonth % 3);\n startDate.setMonth(startMonthOfQuarter, 1);\n startDate.setHours(0, 0, 0, 0);\n break;\n case 'year':\n startDate.setMonth(0, 1);\n startDate.setHours(0, 0, 0, 0);\n break;\n default:\n throw new Error('Invalid time scale');\n }\n\n return startDate;\n}\n\nexport function computeCountToTimeScale(\n date: Date,\n startDate: Date,\n timeScale: 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second',\n step: number,\n diffMS: number = 0\n): number {\n const msInSecond = 1000;\n const msInMinute = msInSecond * 60;\n const msInHour = msInMinute * 60;\n const msInDay = msInHour * 24;\n const msInWeek = msInDay * 7;\n\n let difference: number;\n const adjusted_date = new Date(date.getTime() + diffMS);\n switch (timeScale) {\n case 'second':\n difference = (adjusted_date.getTime() - startDate.getTime()) / msInSecond;\n break;\n case 'minute':\n difference = (adjusted_date.getTime() - startDate.getTime()) / msInMinute;\n break;\n case 'hour':\n difference = (adjusted_date.getTime() - startDate.getTime()) / msInHour;\n break;\n case 'day':\n difference = (adjusted_date.getTime() - startDate.getTime()) / msInDay;\n break;\n case 'week':\n difference = (adjusted_date.getTime() - startDate.getTime()) / msInWeek;\n break;\n case 'month':\n difference =\n (adjusted_date.getFullYear() - startDate.getFullYear()) * 12 +\n (adjusted_date.getMonth() - startDate.getMonth());\n difference +=\n (adjusted_date.getDate() - startDate.getDate()) /\n new Date(adjusted_date.getFullYear(), adjusted_date.getMonth() + 1, 0).getDate();\n break;\n case 'quarter':\n difference =\n (adjusted_date.getFullYear() - startDate.getFullYear()) * 4 +\n (adjusted_date.getMonth() - startDate.getMonth()) / 3;\n difference +=\n (adjusted_date.getDate() - startDate.getDate()) /\n (3 * new Date(adjusted_date.getFullYear(), adjusted_date.getMonth() + 1, 0).getDate());\n break;\n case 'year':\n difference = adjusted_date.getFullYear() - startDate.getFullYear();\n difference += (adjusted_date.getMonth() - startDate.getMonth()) / 12;\n break;\n default:\n throw new Error('Invalid time scale');\n }\n\n return difference / step;\n}\n\n/** 暂时没有用上 函数为了解析日期的余数 */\nexport function parseDateToTimeUnit(\n date: Date,\n timeUnit: 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second'\n): number {\n const millisecondsInSecond = 1000;\n const secondsInMinute = 60;\n const minutesInHour = 60;\n const hoursInDay = 24;\n const daysInWeek = 7;\n const monthsInYear = 12;\n const quartersInYear = 4;\n\n const millisecondsInMinute = millisecondsInSecond * secondsInMinute;\n const millisecondsInHour = millisecondsInMinute * minutesInHour;\n const millisecondsInDay = millisecondsInHour * hoursInDay;\n const millisecondsInWeek = millisecondsInDay * daysInWeek;\n const millisecondsInMonth = millisecondsInDay * (365.25 / monthsInYear); // 近似值\n const millisecondsInQuarter = millisecondsInMonth * (monthsInYear / quartersInYear); // 近似值\n const millisecondsInYear = millisecondsInDay * 365.25; // 近似值\n const daysInMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n switch (timeUnit) {\n case 'second':\n return date.getMilliseconds() / millisecondsInSecond;\n case 'minute':\n return (date.getSeconds() + date.getMilliseconds() / millisecondsInSecond) / secondsInMinute;\n case 'hour':\n return (\n (date.getMinutes() * secondsInMinute + date.getSeconds() + date.getMilliseconds() / millisecondsInSecond) /\n (minutesInHour * secondsInMinute)\n );\n case 'day':\n return (\n (date.getHours() * minutesInHour * secondsInMinute +\n date.getMinutes() * secondsInMinute +\n date.getSeconds() +\n date.getMilliseconds() / millisecondsInSecond) /\n (hoursInDay * minutesInHour * secondsInMinute)\n );\n case 'week':\n return (\n (date.getDay() * hoursInDay * minutesInHour * secondsInMinute +\n date.getHours() * minutesInHour * secondsInMinute +\n date.getMinutes() * secondsInMinute +\n date.getSeconds() +\n date.getMilliseconds() / millisecondsInSecond) /\n (daysInWeek * hoursInDay * minutesInHour * secondsInMinute)\n );\n case 'month':\n return (\n ((date.getDate() - 1) * hoursInDay * minutesInHour * secondsInMinute +\n date.getHours() * minutesInHour * secondsInMinute +\n date.getMinutes() * secondsInMinute +\n date.getSeconds() +\n date.getMilliseconds() / millisecondsInSecond) /\n (daysInMonth * hoursInDay * minutesInHour * secondsInMinute)\n );\n case 'quarter':\n const monthInQuarter = date.getMonth() % 3;\n const daysInQuarter = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate() * 3;\n return (\n ((monthInQuarter * daysInMonth + date.getDate() - 1) * hoursInDay * minutesInHour * secondsInMinute +\n date.getHours() * minutesInHour * secondsInMinute +\n date.getMinutes() * secondsInMinute +\n date.getSeconds() +\n date.getMilliseconds() / millisecondsInSecond) /\n (daysInQuarter * hoursInDay * minutesInHour * secondsInMinute)\n );\n case 'year':\n const daysInYear = isLeapYear(date.getFullYear()) ? 366 : 365;\n return (\n ((date.getMonth() * daysInMonth + date.getDate() - 1) * hoursInDay * minutesInHour * secondsInMinute +\n date.getHours() * minutesInHour * secondsInMinute +\n date.getMinutes() * secondsInMinute +\n date.getSeconds() +\n date.getMilliseconds() / millisecondsInSecond) /\n (daysInYear * hoursInDay * minutesInHour * secondsInMinute)\n );\n default:\n throw new Error('Invalid time unit');\n }\n}\n\n// // 示例用法\n// const date = new Date('2024-07-04T17:20:30');\n// const timeUnit = 'hour';\n// const result = parseDateToTimeUnit(date, timeUnit);\n// console.log(result); // 输出相对于小时的时间差值\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/tools/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import { isValid } from '@visactor/vutils';\nimport { DayTimes } from '../gantt-helper';\n\n/**\n * throttle 保障了首次立即执行 后续触发的回调执行间隔delay时间 区别于throttle2 最后执行时机会提前\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n func.apply(this, args); //先执行函数,保证第一次立即执行\n timer = setTimeout(() => {\n timer = null;\n }, delay);\n }\n // console.log('throttle');\n // 当我们第一次触发事件,定时器不存在时就执行函数,当我们再次点击时,因为定时器存在,\n // 所以无法再进入函数调用(无论事件如何执行),那么只能等定时器事件结束,\n // 我们让timer=null,回到第一次的状态,就又重新开始新的一轮\n };\n}\n/**\n * throttle节流 间隔delay时间后执行 保障了最后执行时机是在delay之后\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle2(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n timer = setTimeout(() => {\n func.apply(this, args);\n timer = null;\n }, delay);\n }\n };\n}\n// export function parseDateFormat(dateString: string) {\n// const formats = [\n// 'yyyy-mm-dd',\n// 'dd-mm-yyyy',\n// 'mm/dd/yyyy',\n// 'yyyy/mm/dd',\n// 'dd/mm/yyyy',\n// 'yyyy.mm.dd',\n// 'dd.mm.yyyy',\n// 'mm.dd.yyyy'\n// ];\n// const separatorsInDate = dateString.match(/[^\\w]/g);\n// for (let i = 0; i < formats.length; i++) {\n// const format = formats[i];\n// const separators = format.match(/[^\\w]/g);\n// let isValidFormat = true;\n// for (let j = 0; j < separators.length; j++) {\n// const part = separators[j];\n// if (part !== separatorsInDate[j]) {\n// isValidFormat = false;\n// break;\n// }\n// }\n// if (isValidFormat) {\n// return format;\n// }\n// }\n\n// return null;\n// }\n\n// export function parseDate(dateString, format) {\n// // 根据解析出的格式将 dateString 解析为日期对象\n// // 这里只是一个示例,假设解析格式为 \"yyyy-mm-dd\"\n// const parts = dateString.split('-');\n// const year = parseInt(parts[0], 10);\n// const month = parseInt(parts[1], 10) - 1;\n// const day = parseInt(parts[2], 10);\n// return new Date(year, month, day);\n// }\nexport function getTodayNearDay(dayOffset: number, format?: string) {\n const today = new Date();\n const todayTime = today.getTime();\n const oneDayTime = 24 * 60 * 60 * 1000;\n const targetTime = todayTime + dayOffset * oneDayTime;\n const date = new Date(targetTime);\n if (format) {\n const year = date.getFullYear().toString();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n format = format.replace('yyyy', year);\n format = format.replace('mm', month);\n format = format.replace('dd', day);\n return format;\n }\n return date;\n}\n\nexport function formatDate(date: Date, format: string) {\n const year = date.getFullYear().toString();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n\n format = format.replace('yyyy', year);\n format = format.replace('mm', month);\n format = format.replace('dd', day);\n if (format.length > 10) {\n const hour = date.getHours().toString().padStart(2, '0');\n const minute = date.getMinutes().toString().padStart(2, '0');\n const second = date.getSeconds().toString().padStart(2, '0');\n\n format = format.replace('hh', hour);\n format = format.replace('mm', minute);\n format = format.replace('ss', second);\n }\n\n return format;\n}\n\n// 修正后的 validateDate 函数\nfunction validateDate(dateParts: string[], format: string) {\n // 根据格式确定年、月、日的索引\n const yearIndex = format.indexOf('yyyy');\n const monthIndex = format.indexOf('mm');\n const dayIndex = format.indexOf('dd');\n const dateYearIndex = yearIndex < monthIndex ? (yearIndex < dayIndex ? 0 : 1) : monthIndex < dayIndex ? 1 : 2;\n const dateMonthIndex = monthIndex < yearIndex ? (monthIndex < dayIndex ? 0 : 1) : monthIndex < dayIndex ? 1 : 2;\n const dateDayIndex = dayIndex < yearIndex ? (dayIndex < monthIndex ? 0 : 1) : dayIndex < monthIndex ? 1 : 2;\n // 解析年、月、日\n const year = parseInt(dateParts[dateYearIndex], 10);\n const month = parseInt(dateParts[dateMonthIndex], 10) - 1; // 月份从0开始\n const day = parseInt(dateParts[dateDayIndex], 10);\n\n // 检查年份是否有效\n if (isNaN(year) || year < 1) {\n return false;\n }\n\n // 检查月份是否有效\n if (isNaN(month) || month < 0 || month > 11) {\n return false;\n }\n\n // 检查日期是否有效\n // 每个月的天数不同,需要考虑闰年\n const daysInMonth = [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (isNaN(day) || day < 1 || day > daysInMonth[month]) {\n return false;\n }\n\n return true;\n}\n// 修正后的 validateDate 函数\nfunction validateTime(dateParts: string[], format: string) {\n // 如果格式包含时分秒,则进一步解析和验证\n if (format.includes('hh') || format.includes('mm') || format.includes('ss')) {\n const timeIndex = format.indexOf('hh') > -1 ? format.indexOf('hh') : format.indexOf('HH');\n const hour = parseInt(dateParts[timeIndex], 10);\n const minute = parseInt(dateParts[timeIndex + 1], 10);\n const second = dateParts.length > timeIndex + 2 ? parseInt(dateParts[timeIndex + 2], 10) : 0;\n\n if (isNaN(hour) || hour < 0 || hour > 23) {\n return false;\n }\n\n if (isNaN(minute) || minute < 0 || minute > 59) {\n return false;\n }\n\n if (isNaN(second) || second < 0 || second > 59) {\n return false;\n }\n }\n\n return true;\n}\n// 辅助函数,用于判断是否为闰年\nfunction isLeapYear(year: number) {\n // 能被4整除且不能被100整除,或者能被400整除的年份是闰年\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\n\n// // 修正后的 parseDateFormat 函数\n// export function parseDateFormat(dateString: string) {\n// const formats = [\n// 'yyyy-mm-dd',\n// 'dd-mm-yyyy',\n// 'mm/dd/yyyy',\n// 'yyyy/mm/dd',\n// 'dd/mm/yyyy',\n// 'yyyy.mm.dd',\n// 'mm.dd.yyyy',\n// 'dd.mm.yyyy'\n// ];\n// dateString = dateString.replace(/\\s+/g, ''); // 移除空格\n// for (let i = 0; i < formats.length; i++) {\n// const format = formats[i];\n// const dateParts = dateString.split(getSeparator(format));\n// const isValid = validateDate(dateParts, format);\n// if (dateParts.length === 3 && isValid) {\n// return format;\n// }\n// }\n// return null;\n// }\n\n// 修正后的 parseDateFormat 函数\nexport function parseDateFormat(dateString: string) {\n const formats = [\n 'yyyy-mm-dd',\n 'dd-mm-yyyy',\n 'mm/dd/yyyy',\n 'yyyy/mm/dd',\n 'dd/mm/yyyy',\n 'yyyy.mm.dd',\n 'mm.dd.yyyy',\n 'dd.mm.yyyy'\n ];\n const timeFormat = ['hh:mm:ss', 'hh:mm'];\n dateString = dateString.trim(); // 移除空格\n const dates = dateString.split(' ');\n const date = dates[0];\n const time = dates[1];\n let dateFormatMatched;\n let timeFormatMatched;\n if (date) {\n for (let i = 0; i < formats.length; i++) {\n const format = formats[i];\n const dateParts = date.split(getSeparator(format));\n const isValid = validateDate(dateParts, format);\n if (dateParts.length === 3 && isValid) {\n dateFormatMatched = format;\n break;\n }\n }\n }\n if (dateFormatMatched) {\n if (time) {\n for (let i = 0; i < timeFormat.length; i++) {\n const format = timeFormat[i];\n const timeParts = time.split(getSeparator(format));\n const formatParts = format.split(getSeparator(format));\n const isValid = validateTime(timeParts, format);\n if (isValid && timeParts.length === formatParts.length) {\n timeFormatMatched = format;\n break;\n }\n }\n }\n }\n if (date && time && dateFormatMatched && timeFormatMatched) {\n return dateFormatMatched + ' ' + timeFormatMatched;\n }\n if (date && !time) {\n return dateFormatMatched;\n }\n return 'yyyy-mm-dd hh:mm:ss';\n}\n\n// 根据日期格式获取分隔符正则表达式\nfunction getSeparator(format: string) {\n // 找到日期格式中的分隔符\n const separators = format.match(/[^\\w]/g);\n if (separators) {\n // 转义分隔符,以确保正则表达式正确处理特殊字符\n const escapedSeparators = separators.map(s => '\\\\' + s).join('|');\n return new RegExp(escapedSeparators, 'g');\n }\n return /[^\\w]/;\n}\n\nexport function parseStringTemplate(template: string, data: any) {\n const result = template.replace(/\\{([^}]+)\\}/g, (match, key) => {\n const keys = key.split('.');\n let value = data;\n\n for (const k of keys) {\n if (value.hasOwnProperty(k)) {\n value = value[k];\n } else {\n value = match; // 如果找不到对应的字段值,保持原样\n break;\n }\n }\n\n return value;\n });\n return result;\n}\n\nexport function toBoxArray<T>(obj: T | T[]): [T, T, T, T] {\n if (!Array.isArray(obj)) {\n return [obj /*top*/, obj /*right*/, obj /*bottom*/, obj /*left*/];\n }\n if (obj.length === 3) {\n return [obj[0] /*top*/, obj[1] /*right*/, obj[2] /*bottom*/, obj[1] /*left*/];\n }\n if (obj.length === 2) {\n return [obj[0] /*top*/, obj[1] /*right*/, obj[0] /*bottom*/, obj[1] /*left*/];\n }\n if (obj.length === 1) {\n return [obj[0] /*top*/, obj[0] /*right*/, obj[0] /*bottom*/, obj[0] /*left*/];\n }\n // return obj as [T, T, T, T];//原先这种返回方式,会造成修改引用问题\n return [obj[0] /*top*/, obj[1] /*right*/, obj[2] /*bottom*/, obj[3] /*left*/];\n}\n\nexport function getWeekNumber(currentDate: Date) {\n // Calculate the week number within the year\n const startOfYear = new Date(currentDate.getFullYear(), 0, 1);\n // 以下代码的第一个 +1 是为了处理currentDate正好是一周当中的第一天0点0分0秒的情况 ;第2个 +1 是天索引从0开始的缘故\n const weekNumber = Math.ceil(((currentDate.getTime() + 1 - startOfYear.getTime()) / 86400000 + 1) / 7);\n return weekNumber;\n}\n\nexport function getWeekday(dateString: string | Date, format: 'long' | 'short' = 'long') {\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const date = new Date(dateString);\n\n if (format === 'short') {\n return days[date.getDay()].substr(0, 3);\n } else if (format === 'long') {\n return days[date.getDay()];\n }\n return 'Invalid format specified. Please use \"short\" or \"long\".';\n}\n/** 判断对象的属性是否可写 */\nexport function isPropertyWritable(obj: any, prop: string | number) {\n const descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n if (!descriptor) {\n // 属性不存在\n return false;\n }\n\n // 检查是否有 setter 方法或 writable 属性为 true\n return !!descriptor.set || descriptor.writable === true;\n}\n\n/** 创建日期 */\nexport function createDateAtMidnight(dateStr?: string | number | Date, forceMidnight: boolean = false): Date {\n let date;\n if (dateStr) {\n date = new Date(dateStr);\n if (typeof dateStr === 'string') {\n if (dateStr.length > 10) {\n if (forceMidnight) {\n date.setHours(0, 0, 0, 0);\n }\n // 如果 dateStr 是字符串类型且包含时分秒,不需要设置为午夜\n return date;\n }\n date.setHours(0, 0, 0, 0);\n }\n } else {\n date = new Date();\n }\n if (forceMidnight) {\n date.setHours(0, 0, 0, 0);\n }\n return date;\n}\nexport function createDateAtLastMinute(dateStr?: string | number | Date, forceSetMinute: boolean = false): Date {\n let date;\n if (dateStr) {\n date = new Date(dateStr);\n if (typeof dateStr === 'string') {\n if (dateStr.length > 10) {\n if (forceSetMinute) {\n date.setMinutes(59, 59, 999);\n }\n // 如果 dateStr 是字符串类型且包含时分秒,不需要设置为午夜\n return date;\n }\n date.setMinutes(59, 59, 999);\n }\n } else {\n date = new Date();\n }\n if (forceSetMinute) {\n date.setMinutes(59, 59, 999);\n }\n return date;\n}\n\nexport function createDateAtLastSecond(dateStr?: string | number | Date, forceSetSecond: boolean = false): Date {\n let date;\n if (dateStr) {\n date = new Date(dateStr);\n if (typeof dateStr === 'string') {\n if (dateStr.length > 10) {\n if (forceSetSecond) {\n date.setSeconds(59, 999);\n }\n // 如果 dateStr 是字符串类型且包含时分秒,不需要设置为午夜\n return date;\n }\n date.setSeconds(59, 999);\n }\n } else {\n date = new Date();\n }\n if (forceSetSecond) {\n date.setSeconds(59, 999);\n }\n return date;\n}\n\nexport function createDateAtLastMillisecond(\n dateStr?: string | number | Date,\n forceSetMillisecond: boolean = false\n): Date {\n let date;\n if (dateStr) {\n date = new Date(dateStr);\n if (typeof dateStr === 'string') {\n if (dateStr.length > 10) {\n if (forceSetMillisecond) {\n date.setMilliseconds(999);\n }\n // 如果 dateStr 是字符串类型且包含时分秒,不需要设置为午夜\n return date;\n }\n date.setMilliseconds(999);\n }\n } else {\n date = new Date();\n }\n if (forceSetMillisecond) {\n date.setMilliseconds(999);\n }\n return date;\n}\n/** 创建日期 */\nexport function createDateAtLastHour(dateStr?: string | number | Date, forceLastHour: boolean = false): Date {\n let date;\n if (dateStr) {\n date = new Date(dateStr);\n if (typeof dateStr === 'string') {\n if (dateStr.length > 10) {\n if (forceLastHour) {\n date.setHours(23, 59, 59, 999);\n }\n // 如果 dateStr 是字符串类型且包含时分秒,不需要设置为午夜\n return date;\n }\n date.setHours(23, 59, 59, 999);\n }\n } else {\n date = new Date();\n }\n if (forceLastHour) {\n date.setHours(23, 59, 59, 999);\n }\n return date;\n}\n\nexport function getEndDateByTimeUnit(\n startDate: Date,\n date: Date,\n timeScale: 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second',\n step: number\n) {\n let endDate = new Date(date);\n\n switch (timeScale) {\n case 'second':\n endDate.setMilliseconds(999);\n break;\n case 'minute':\n endDate.setSeconds(59, 999);\n break;\n case 'hour':\n endDate.setMinutes(59, 59, 999);\n break;\n case 'day':\n endDate.setHours(23, 59, 59, 999);\n break;\n case 'week':\n const day = endDate.getDay();\n const diffToEndOfWeek = 6 - day;\n endDate.setDate(endDate.getDate() + diffToEndOfWeek);\n endDate.setHours(23, 59, 59, 999);\n break;\n case 'month':\n const lastDayOfMonth = new Date(endDate.getFullYear(), endDate.getMonth() + 1, 0).getDate();\n endDate.setDate(lastDayOfMonth);\n endDate.setHours(23, 59, 59, 999);\n break;\n case 'quarter':\n const currentMonth = endDate.getMonth();\n const endMonthOfQuarter = currentMonth - (currentMonth % 3) + 2;\n const lastDayOfQuarter = new Date(endDate.getFullYear(), endMonthOfQuarter + 1, 0).getDate();\n endDate.setMonth(endMonthOfQuarter, lastDayOfQuarter);\n endDate.setHours(23, 59, 59, 999);\n break;\n case 'year':\n endDate.setMonth(11, 31);\n endDate.setHours(23, 59, 59, 999);\n break;\n default:\n throw new Error('Invalid time scale');\n }\n\n const count = computeCountToTimeScale(endDate, startDate, timeScale, step, 1);\n const targetCount = Math.ceil(count);\n if (targetCount > count) {\n const dif = (targetCount - count) * step;\n const msInSecond = 1000;\n const msInMinute = msInSecond * 60;\n const msInHour = msInMinute * 60;\n const msInDay = msInHour * 24;\n const msInWeek = msInDay * 7;\n const adjusted_date = new Date(endDate.getTime() + 1);\n switch (timeScale) {\n case 'second':\n endDate.setTime(endDate.getTime() + dif * msInSecond);\n break;\n case 'minute':\n endDate.setTime(endDate.getTime() + dif * msInMinute);\n break;\n case 'hour':\n endDate.setTime(endDate.getTime() + dif * msInHour);\n break;\n case 'day':\n endDate.setTime(endDate.getTime() + dif * msInDay);\n break;\n case 'week':\n endDate.setTime(endDate.getTime() + dif * msInWeek);\n break;\n case 'month':\n endDate = new Date(endDate.getFullYear(), endDate.getMonth() + 1 + Math.round(dif), 0);\n // endDate.setTime(lastDayOfMonth);\n endDate.setHours(23, 59, 59, 999);\n break;\n case 'quarter':\n const currentMonth = endDate.getMonth();\n const endMonthOfQuarter = currentMonth - (currentMonth % 3) + 2;\n endDate = new Date(endDate.getFullYear(), endMonthOfQuarter + Math.round(dif * 3) + 1, 0);\n endDate.setHours(23, 59, 59, 999);\n break;\n case 'year':\n endDate.setFullYear(endDate.getFullYear() + Math.floor(dif));\n endDate.setHours(23, 59, 59, 999);\n break;\n default:\n throw new Error('Invalid time scale');\n }\n }\n\n return endDate;\n}\n\n// export function getEndDateByTimeUnit(\n// startDate: Date,\n// date: Date,\n// timeScale: 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second',\n// step: number\n// ): Date {\n// const count = computeCountToTimeScale(date, startDate, timeScale, step);\n// const targetCount = Math.ceil(count);\n// debugger;\n// const endDate = new Date(startDate);\n\n// switch (timeScale) {\n// case 'second':\n// endDate.setSeconds(endDate.getSeconds() + targetCount * step);\n// endDate.setMilliseconds(999);\n// break;\n// case 'minute':\n// endDate.setMinutes(endDate.getMinutes() + targetCount * step);\n// endDate.setSeconds(59, 999);\n// break;\n// case 'hour':\n// endDate.setHours(endDate.getHours() + targetCount * step);\n// endDate.setMinutes(59, 59, 999);\n// break;\n// case 'day':\n// endDate.setDate(endDate.getDate() + targetCount * step);\n// endDate.setHours(23, 59, 59, 999);\n// break;\n// case 'week':\n// endDate.setDate(endDate.getDate() + targetCount * step * 7);\n// endDate.setHours(23, 59, 59, 999);\n// break;\n// case 'month':\n// endDate.setMonth(endDate.getMonth() + targetCount * step);\n// const lastDayOfMonth = new Date(endDate.getFullYear(), endDate.getMonth() + 1, 0).getDate();\n// endDate.setDate(lastDayOfMonth);\n// endDate.setHours(23, 59, 59, 999);\n// break;\n// case 'quarter':\n// endDate.setMonth(endDate.getMonth() + targetCount * step * 3);\n// const lastDayOfQuarter = new Date(endDate.getFullYear(), endDate.getMonth() + 1, 0).getDate();\n// endDate.setDate(lastDayOfQuarter);\n// endDate.setHours(23, 59, 59, 999);\n// break;\n// case 'year':\n// endDate.setFullYear(endDate.getFullYear() + targetCount * step);\n// endDate.setMonth(11, 31);\n// endDate.setHours(23, 59, 59, 999);\n// break;\n// default:\n// throw new Error('Invalid time scale');\n// }\n\n// return endDate;\n// }\n\nexport function getStartDateByTimeUnit(\n date: Date,\n timeScale: 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second',\n startOfWeekSetting = 'monday'\n): Date {\n const startDate = new Date(date);\n\n switch (timeScale) {\n case 'second':\n startDate.setMilliseconds(0);\n break;\n case 'minute':\n startDate.setSeconds(0, 0);\n break;\n case 'hour':\n startDate.setMinutes(0, 0, 0);\n break;\n case 'day':\n startDate.setHours(0, 0, 0, 0);\n break;\n case 'week':\n const day = startDate.getDay();\n let diffToStartOfWeek = day;\n if (startOfWeekSetting === 'monday') {\n diffToStartOfWeek = day === 0 ? -6 : 1 - day; // Adjusting for Sunday as the start of the week\n } else {\n diffToStartOfWeek = -day;\n }\n\n startDate.setDate(startDate.getDate() + diffToStartOfWeek);\n startDate.setHours(0, 0, 0, 0);\n break;\n case 'month':\n startDate.setDate(1);\n startDate.setHours(0, 0, 0, 0);\n break;\n case 'quarter':\n const currentMonth = startDate.getMonth();\n const startMonthOfQuarter = currentMonth - (currentMonth % 3);\n startDate.setMonth(startMonthOfQuarter, 1);\n startDate.setHours(0, 0, 0, 0);\n break;\n case 'year':\n startDate.setMonth(0, 1);\n startDate.setHours(0, 0, 0, 0);\n break;\n default:\n throw new Error('Invalid time scale');\n }\n\n return startDate;\n}\n\nexport function computeCountToTimeScale(\n date: Date,\n startDate: Date,\n timeScale: 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second',\n step: number,\n diffMS: number = 0\n): number {\n const msInSecond = 1000;\n const msInMinute = msInSecond * 60;\n const msInHour = msInMinute * 60;\n const msInDay = msInHour * 24;\n const msInWeek = msInDay * 7;\n\n let difference: number;\n const adjusted_date = new Date(date.getTime() + diffMS);\n\n switch (timeScale) {\n case 'second':\n difference = (adjusted_date.getTime() - startDate.getTime()) / msInSecond;\n break;\n case 'minute':\n difference = (adjusted_date.getTime() - startDate.getTime()) / msInMinute;\n break;\n case 'hour':\n difference = (adjusted_date.getTime() - startDate.getTime()) / msInHour;\n break;\n case 'day':\n difference = (adjusted_date.getTime() - startDate.getTime()) / msInDay;\n break;\n case 'week':\n difference = (adjusted_date.getTime() - startDate.getTime()) / msInWeek;\n break;\n case 'month':\n const startDaysInMonth = new Date(startDate.getFullYear(), startDate.getMonth() + 1, 0).getDate();\n const adjustedDaysInMonth = new Date(adjusted_date.getFullYear(), adjusted_date.getMonth() + 1, 0).getDate();\n difference =\n (adjusted_date.getFullYear() - startDate.getFullYear()) * 12 +\n (adjusted_date.getMonth() - startDate.getMonth());\n\n // Calculate fractional difference by normalizing day progress within each specific month\n // This handles variable month lengths (28/29/30/31 days) correctly\n difference += adjusted_date.getDate() / adjustedDaysInMonth - startDate.getDate() / startDaysInMonth;\n break;\n case 'quarter':\n difference =\n (adjusted_date.getFullYear() - startDate.getFullYear()) * 4 +\n (adjusted_date.getMonth() - startDate.getMonth()) / 3;\n difference +=\n (adjusted_date.getDate() - startDate.getDate()) /\n (3 * new Date(adjusted_date.getFullYear(), adjusted_date.getMonth() + 1, 0).getDate());\n break;\n case 'year':\n difference = adjusted_date.getFullYear() - startDate.getFullYear();\n difference += (adjusted_date.getMonth() - startDate.getMonth()) / 12;\n break;\n default:\n throw new Error('Invalid time scale');\n }\n\n return difference / step;\n}\n\n/** 暂时没有用上 函数为了解析日期的余数 */\nexport function parseDateToTimeUnit(\n date: Date,\n timeUnit: 'day' | 'week' | 'month' | 'quarter' | 'year' | 'hour' | 'minute' | 'second'\n): number {\n const millisecondsInSecond = 1000;\n const secondsInMinute = 60;\n const minutesInHour = 60;\n const hoursInDay = 24;\n const daysInWeek = 7;\n const monthsInYear = 12;\n const quartersInYear = 4;\n\n const millisecondsInMinute = millisecondsInSecond * secondsInMinute;\n const millisecondsInHour = millisecondsInMinute * minutesInHour;\n const millisecondsInDay = millisecondsInHour * hoursInDay;\n const millisecondsInWeek = millisecondsInDay * daysInWeek;\n const millisecondsInMonth = millisecondsInDay * (365.25 / monthsInYear); // 近似值\n const millisecondsInQuarter = millisecondsInMonth * (monthsInYear / quartersInYear); // 近似值\n const millisecondsInYear = millisecondsInDay * 365.25; // 近似值\n const daysInMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n switch (timeUnit) {\n case 'second':\n return date.getMilliseconds() / millisecondsInSecond;\n case 'minute':\n return (date.getSeconds() + date.getMilliseconds() / millisecondsInSecond) / secondsInMinute;\n case 'hour':\n return (\n (date.getMinutes() * secondsInMinute + date.getSeconds() + date.getMilliseconds() / millisecondsInSecond) /\n (minutesInHour * secondsInMinute)\n );\n case 'day':\n return (\n (date.getHours() * minutesInHour * secondsInMinute +\n date.getMinutes() * secondsInMinute +\n date.getSeconds() +\n date.getMilliseconds() / millisecondsInSecond) /\n (hoursInDay * minutesInHour * secondsInMinute)\n );\n case 'week':\n return (\n (date.getDay() * hoursInDay * minutesInHour * secondsInMinute +\n date.getHours() * minutesInHour * secondsInMinute +\n date.getMinutes() * secondsInMinute +\n date.getSeconds() +\n date.getMilliseconds() / millisecondsInSecond) /\n (daysInWeek * hoursInDay * minutesInHour * secondsInMinute)\n );\n case 'month':\n return (\n ((date.getDate() - 1) * hoursInDay * minutesInHour * secondsInMinute +\n date.getHours() * minutesInHour * secondsInMinute +\n date.getMinutes() * secondsInMinute +\n date.getSeconds() +\n date.getMilliseconds() / millisecondsInSecond) /\n (daysInMonth * hoursInDay * minutesInHour * secondsInMinute)\n );\n case 'quarter':\n const monthInQuarter = date.getMonth() % 3;\n const daysInQuarter = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate() * 3;\n return (\n ((monthInQuarter * daysInMonth + date.getDate() - 1) * hoursInDay * minutesInHour * secondsInMinute +\n date.getHours() * minutesInHour * secondsInMinute +\n date.getMinutes() * secondsInMinute +\n date.getSeconds() +\n date.getMilliseconds() / millisecondsInSecond) /\n (daysInQuarter * hoursInDay * minutesInHour * secondsInMinute)\n );\n case 'year':\n const daysInYear = isLeapYear(date.getFullYear()) ? 366 : 365;\n return (\n ((date.getMonth() * daysInMonth + date.getDate() - 1) * hoursInDay * minutesInHour * secondsInMinute +\n date.getHours() * minutesInHour * secondsInMinute +\n date.getMinutes() * secondsInMinute +\n date.getSeconds() +\n date.getMilliseconds() / millisecondsInSecond) /\n (daysInYear * hoursInDay * minutesInHour * secondsInMinute)\n );\n default:\n throw new Error('Invalid time unit');\n }\n}\n\n// // 示例用法\n// const date = new Date('2024-07-04T17:20:30');\n// const timeUnit = 'hour';\n// const result = parseDateToTimeUnit(date, timeUnit);\n// console.log(result); // 输出相对于小时的时间差值\n"]}
|