diff --git a/libs/common/src/lib/date-range.helper.spec.ts b/libs/common/src/lib/date-range.helper.spec.ts
new file mode 100644
index 0000000000..5798fba7b4
--- /dev/null
+++ b/libs/common/src/lib/date-range.helper.spec.ts
@@ -0,0 +1,42 @@
+import { getAvailableDateRanges } from './date-range.helper';
+
+describe('getAvailableDateRanges', () => {
+ const referenceDate = new Date('2026-10-19T12:00:00.000Z');
+
+ it('returns the short ranges without any activity', () => {
+ expect(getAvailableDateRanges({ referenceDate })).toEqual([
+ '1d',
+ 'wtd',
+ 'mtd',
+ 'ytd',
+ 'max'
+ ]);
+ });
+
+ it('returns the short ranges for less than one year of data', () => {
+ expect(
+ getAvailableDateRanges({
+ referenceDate,
+ dateOfFirstActivity: new Date('2026-01-05T00:00:00.000Z')
+ })
+ ).toEqual(['1d', 'wtd', 'mtd', 'ytd', 'max']);
+ });
+
+ it('adds 1y after one year of data', () => {
+ expect(
+ getAvailableDateRanges({
+ referenceDate,
+ dateOfFirstActivity: new Date('2025-10-18T00:00:00.000Z')
+ })
+ ).toEqual(['1d', 'wtd', 'mtd', 'ytd', '1y', 'max']);
+ });
+
+ it('adds 1y and 5y after five years of data', () => {
+ expect(
+ getAvailableDateRanges({
+ referenceDate,
+ dateOfFirstActivity: '2021-10-18T00:00:00.000Z'
+ })
+ ).toEqual(['1d', 'wtd', 'mtd', 'ytd', '1y', '5y', 'max']);
+ });
+});
diff --git a/libs/common/src/lib/date-range.helper.ts b/libs/common/src/lib/date-range.helper.ts
new file mode 100644
index 0000000000..a8085856be
--- /dev/null
+++ b/libs/common/src/lib/date-range.helper.ts
@@ -0,0 +1,33 @@
+import { DateRange } from '@ghostfolio/common/types';
+
+import { differenceInYears } from 'date-fns';
+
+/**
+ * Returns the date ranges which are meaningful for a user depending on the
+ * date of the first activity (e.g. `1y` requires at least one year of data).
+ */
+export function getAvailableDateRanges({
+ dateOfFirstActivity,
+ referenceDate = new Date()
+}: {
+ dateOfFirstActivity?: Date | string | null;
+ referenceDate?: Date;
+} = {}): DateRange[] {
+ const yearsOfData = dateOfFirstActivity
+ ? differenceInYears(referenceDate, new Date(dateOfFirstActivity))
+ : 0;
+
+ const dateRanges: DateRange[] = ['1d', 'wtd', 'mtd', 'ytd'];
+
+ if (yearsOfData >= 1) {
+ dateRanges.push('1y');
+ }
+
+ if (yearsOfData >= 5) {
+ dateRanges.push('5y');
+ }
+
+ dateRanges.push('max');
+
+ return dateRanges;
+}