in insights & explore, time-based category supports calculated based on the transaction's time zone

This commit is contained in:
MaysWind
2025-12-31 00:00:04 +08:00
parent 958515b9e0
commit f5e4d82efc
2 changed files with 116 additions and 38 deletions
+104 -33
View File
@@ -804,41 +804,87 @@ export function getThisYearLastUnixTime(): number {
return moment.unix(getThisYearFirstUnixTime()).add(1, 'years').subtract(1, 'seconds').unix();
}
export function getYearFirstUnixTimeBySpecifiedUnixTime(unixTime: number): number {
const date = moment.unix(unixTime).set({ hour: 0, minute: 0, second: 0, millisecond: 0 });
return date.subtract(date.dayOfYear() - 1, 'days').unix();
export function getYearFirstUnixTimeBySpecifiedUnixTime(unixTime: number, utcOffset?: number): number {
let date = moment.unix(unixTime);
if (isNumber(utcOffset)) {
date = date.tz(getFixedTimezoneName(utcOffset));
}
return date.set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(date.dayOfYear() - 1, 'days').unix();
}
export function getYearLastUnixTimeBySpecifiedUnixTime(unixTime: number): number {
return moment.unix(getYearFirstUnixTimeBySpecifiedUnixTime(unixTime)).add(1, 'years').subtract(1, 'seconds').unix();
export function getYearLastUnixTimeBySpecifiedUnixTime(unixTime: number, utcOffset?: number): number {
let date = moment.unix(getYearFirstUnixTimeBySpecifiedUnixTime(unixTime, utcOffset));
if (isNumber(utcOffset)) {
date = date.tz(getFixedTimezoneName(utcOffset));
}
return date.add(1, 'years').subtract(1, 'seconds').unix();
}
export function getQuarterFirstUnixTimeBySpecifiedUnixTime(unixTime: number): number {
const date = moment.unix(unixTime).set({ hour: 0, minute: 0, second: 0, millisecond: 0 });
export function getQuarterFirstUnixTimeBySpecifiedUnixTime(unixTime: number, utcOffset?: number): number {
let date = moment.unix(unixTime);
if (isNumber(utcOffset)) {
date = date.tz(getFixedTimezoneName(utcOffset));
}
date = date.set({ hour: 0, minute: 0, second: 0, millisecond: 0 });
const month = date.month();
const quarterStartMonth = Math.floor(month / 3) * 3;
return date.set({ month: quarterStartMonth, date: 1 }).unix();
}
export function getQuarterLastUnixTimeBySpecifiedUnixTime(unixTime: number): number {
return moment.unix(getQuarterFirstUnixTimeBySpecifiedUnixTime(unixTime)).add(3, 'months').subtract(1, 'seconds').unix();
export function getQuarterLastUnixTimeBySpecifiedUnixTime(unixTime: number, utcOffset?: number): number {
let date = moment.unix(getQuarterFirstUnixTimeBySpecifiedUnixTime(unixTime, utcOffset));
if (isNumber(utcOffset)) {
date = date.tz(getFixedTimezoneName(utcOffset));
}
return date.add(3, 'months').subtract(1, 'seconds').unix();
}
export function getMonthFirstUnixTimeBySpecifiedUnixTime(unixTime: number): number {
const date = moment.unix(unixTime).set({ hour: 0, minute: 0, second: 0, millisecond: 0 });
return date.subtract(date.date() - 1, 'days').unix();
export function getMonthFirstUnixTimeBySpecifiedUnixTime(unixTime: number, utcOffset?: number): number {
let date = moment.unix(unixTime);
if (isNumber(utcOffset)) {
date = date.tz(getFixedTimezoneName(utcOffset));
}
return date.set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(date.date() - 1, 'days').unix();
}
export function getMonthLastUnixTimeBySpecifiedUnixTime(unixTime: number): number {
return moment.unix(getMonthFirstUnixTimeBySpecifiedUnixTime(unixTime)).add(1, 'months').subtract(1, 'seconds').unix();
export function getMonthLastUnixTimeBySpecifiedUnixTime(unixTime: number, utcOffset?: number): number {
let date = moment.unix(getMonthFirstUnixTimeBySpecifiedUnixTime(unixTime, utcOffset));
if (isNumber(utcOffset)) {
date = date.tz(getFixedTimezoneName(utcOffset));
}
return date.add(1, 'months').subtract(1, 'seconds').unix();
}
export function getDayFirstUnixTimeBySpecifiedUnixTime(unixTime: number): number {
return moment.unix(unixTime).set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).unix();
export function getDayFirstUnixTimeBySpecifiedUnixTime(unixTime: number, utcOffset?: number): number {
let date = moment.unix(unixTime);
if (isNumber(utcOffset)) {
date = date.tz(getFixedTimezoneName(utcOffset));
}
return date.set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).unix();
}
export function getDayLastUnixTimeBySpecifiedUnixTime(unixTime: number): number {
return moment.unix(unixTime).set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).add(1, 'days').subtract(1, 'seconds').unix();
export function getDayLastUnixTimeBySpecifiedUnixTime(unixTime: number, utcOffset?: number): number {
let date = moment.unix(unixTime);
if (isNumber(utcOffset)) {
date = date.tz(getFixedTimezoneName(utcOffset));
}
return date.set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).add(1, 'days').subtract(1, 'seconds').unix();
}
export function getYearFirstUnixTime(year: number): number {
@@ -1486,8 +1532,12 @@ export function isDateRangeMatchOneMonth(minTime: number, maxTime: number): bool
return isDateRangeMatchFullMonths(minTime, maxTime);
}
export function getFiscalYearFromUnixTime(unixTime: number, fiscalYearStartValue: number): number {
const date = moment.unix(unixTime);
export function getFiscalYearFromUnixTime(unixTime: number, fiscalYearStartValue: number, utcOffset?: number): number {
let date = moment.unix(unixTime);
if (isNumber(utcOffset)) {
date = date.tz(getFixedTimezoneName(utcOffset));
}
// For January 1 fiscal year start, fiscal year matches calendar year
if (fiscalYearStartValue === FiscalYearStart.JanuaryFirstDay.value) {
@@ -1517,12 +1567,22 @@ export function getFiscalYearFromUnixTime(unixTime: number, fiscalYearStartValue
return year + 1;
}
export function getFiscalYearStartUnixTime(unixTime: number, fiscalYearStartValue: number): number {
const date = moment.unix(unixTime);
export function getFiscalYearStartUnixTime(unixTime: number, fiscalYearStartValue: number, utcOffset?: number): number {
let date = moment.unix(unixTime);
if (isNumber(utcOffset)) {
date = date.tz(getFixedTimezoneName(utcOffset));
}
// For January 1 fiscal year start, fiscal year start time is always January 1 in the input calendar year
if (fiscalYearStartValue === FiscalYearStart.JanuaryFirstDay.value) {
return moment().year(date.year()).month(0).date(1).hour(0).minute(0).second(0).millisecond(0).unix();
let finalDate = moment();
if (isNumber(utcOffset)) {
finalDate = finalDate.tz(getFixedTimezoneName(utcOffset));
}
return finalDate.year(date.year()).month(0).date(1).hour(0).minute(0).second(0).millisecond(0).unix();
}
let fiscalYearStart = FiscalYearStart.valueOf(fiscalYearStartValue);
@@ -1545,7 +1605,13 @@ export function getFiscalYearStartUnixTime(unixTime: number, fiscalYearStartValu
startYear = year;
}
return moment().set({
let finalDate = moment();
if (isNumber(utcOffset)) {
finalDate = finalDate.tz(getFixedTimezoneName(utcOffset));
}
return finalDate.set({
year: startYear,
month: fiscalYearStart.month - 1, // 0-index
date: fiscalYearStart.day,
@@ -1556,21 +1622,26 @@ export function getFiscalYearStartUnixTime(unixTime: number, fiscalYearStartValu
}).unix();
}
export function getFiscalYearEndUnixTime(unixTime: number, fiscalYearStart: number): number {
const fiscalYearStartTime = moment.unix(getFiscalYearStartUnixTime(unixTime, fiscalYearStart));
return fiscalYearStartTime.add(1, 'years').subtract(1, 'seconds').unix();
export function getFiscalYearEndUnixTime(unixTime: number, fiscalYearStart: number, utcOffset?: number): number {
let date = moment.unix(getFiscalYearStartUnixTime(unixTime, fiscalYearStart));
if (isNumber(utcOffset)) {
date = date.tz(getFixedTimezoneName(utcOffset));
}
return date.add(1, 'years').subtract(1, 'seconds').unix();
}
export function getCurrentFiscalYear(fiscalYearStart: number): number {
export function getCurrentFiscalYear(fiscalYearStart: number, utcOffset?: number): number {
const date = moment();
return getFiscalYearFromUnixTime(date.unix(), fiscalYearStart);
return getFiscalYearFromUnixTime(date.unix(), fiscalYearStart, utcOffset);
}
export function getFiscalYearTimeRangeFromUnixTime(unixTime: number, fiscalYearStart: number): FiscalYearUnixTime {
const start = getFiscalYearStartUnixTime(unixTime, fiscalYearStart);
const end = getFiscalYearEndUnixTime(unixTime, fiscalYearStart);
export function getFiscalYearTimeRangeFromUnixTime(unixTime: number, fiscalYearStart: number, utcOffset?: number): FiscalYearUnixTime {
const start = getFiscalYearStartUnixTime(unixTime, fiscalYearStart, utcOffset);
const end = getFiscalYearEndUnixTime(unixTime, fiscalYearStart, utcOffset);
return {
year: getFiscalYearFromUnixTime(unixTime, fiscalYearStart),
year: getFiscalYearFromUnixTime(unixTime, fiscalYearStart, utcOffset),
minUnixTime: start,
maxUnixTime: end,
};