From c1f5456741234dbdb5db731eb5b4245ad1d18525 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 9 Oct 2026 15:13:19 +0200 Subject: [PATCH] Fix end date of calendar year date ranges --- .../portfolio/calculator/portfolio-calculator.ts | 14 ++++++-------- .../calculator/roai/portfolio-calculator.spec.ts | 8 ++++---- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index 1527c4bd3b..ca440c6d2a 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -1418,14 +1418,8 @@ export abstract class PortfolioCalculator { let netPerformanceAtStartDate: number; let netPerformanceWithCurrencyEffectAtStartDate: number; - // The historical data items are dated at midnight in UTC, hence a start - // or an end at the end of a day in the time zone of the instance is - // changed to this date - const endDate = isEqual(end, endOfDay(end)) ? resetHours(end) : end; - - const startDate = isEqual(start, endOfDay(start)) - ? resetHours(start) - : start; + const endDate = this.toChartDate(end); + const startDate = this.toChartDate(start); for (const historicalDataItem of historicalData) { const date = resetHours(parseDate(historicalDataItem.date)); @@ -1920,4 +1914,8 @@ export abstract class PortfolioCalculator { await this.initialize(attempt + 1); } } + + private toChartDate(aDate: Date) { + return isEqual(aDate, endOfDay(aDate)) ? resetHours(aDate) : aDate; + } } diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.spec.ts index 9589132372..43ff160a78 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.spec.ts @@ -1,3 +1,7 @@ +/** + * @jest-environment /jest-environment-tz.js + * @jest-environment-options {"timeZone": "America/New_York"} + */ import { PortfolioCalculator } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator'; import { userDummyData } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator-test-utils'; import { PortfolioCalculatorFactory } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator.factory'; @@ -186,10 +190,6 @@ describe('PortfolioCalculator', () => { }); describe('get performance', () => { - // The chart items are dated at midnight in UTC, but a calendar year date - // range ends at the end of 31 December in the time zone of the instance. - // Hence this test must give the same result with the instance in any time - // zone. Set TEST_TZ to run it with the instance in another time zone. it('with a calendar year date range', async () => { const snapshot = await portfolioCalculator.getSnapshot();