From 82c4a949d06b79a4bc75138de7515878d27079b9 Mon Sep 17 00:00:00 2001 From: Alexander Polyankin <alexander.polyankin@metabase.com> Date: Thu, 24 Oct 2024 13:11:05 -0400 Subject: [PATCH] Fix date formatting of parameter values with time (#49046) * Fix date formatting of parameter values with time * Update frontend/src/metabase/parameters/utils/date-formatting.ts Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com> * Adjust E2E test * Fix tests --------- Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com> --- .../v1/queries/utils/query-time.js | 2 +- .../parameters/utils/date-formatting.ts | 14 +++++++--- .../parameters/utils/formatting.unit.spec.ts | 26 ++++++++++++++++--- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/frontend/src/metabase-lib/v1/queries/utils/query-time.js b/frontend/src/metabase-lib/v1/queries/utils/query-time.js index 833d5c8064b..aa069cceeea 100644 --- a/frontend/src/metabase-lib/v1/queries/utils/query-time.js +++ b/frontend/src/metabase-lib/v1/queries/utils/query-time.js @@ -146,7 +146,7 @@ function generateTimeValueDescription(value, bucketing, isExclude) { if (bucketing) { return formatDateTimeWithUnit(value, bucketing, { isExclude }); } else if (m.hours() || m.minutes()) { - return m.format("MMMM D, YYYY hh:mm a"); + return m.format("MMMM D, YYYY hh:mm A"); } else { return m.format("MMMM D, YYYY"); } diff --git a/frontend/src/metabase/parameters/utils/date-formatting.ts b/frontend/src/metabase/parameters/utils/date-formatting.ts index a0740c324f7..11529baf3ca 100644 --- a/frontend/src/metabase/parameters/utils/date-formatting.ts +++ b/frontend/src/metabase/parameters/utils/date-formatting.ts @@ -1,4 +1,4 @@ -import moment from "moment-timezone"; // eslint-disable-line no-restricted-imports -- deprecated usage +import moment, { type Moment } from "moment-timezone"; // eslint-disable-line no-restricted-imports -- deprecated usage import { t } from "ttag"; import _ from "underscore"; @@ -126,16 +126,24 @@ function parseDateRangeValue(value: string) { return { start: moment(start, true), end: moment(end, true) }; } +function formatSingleDate(date: Moment) { + if (date.hours() || date.minutes()) { + return date.format("MMMM D, YYYY hh:mm A"); + } else { + return date.format("MMMM D, YYYY"); + } +} + export function formatRangeWidget(value: string): string | null { const { start, end } = parseDateRangeValue(value); return start.isValid() && end.isValid() - ? start.format("MMMM D, YYYY") + " - " + end.format("MMMM D, YYYY") + ? formatSingleDate(start) + " - " + formatSingleDate(end) : null; } function formatSingleWidget(value: string): string | null { const m = moment(value, true); - return m.isValid() ? m.format("MMMM D, YYYY") : null; + return m.isValid() ? formatSingleDate(m) : null; } function formatMonthYearWidget(value: string): string | null { diff --git a/frontend/src/metabase/parameters/utils/formatting.unit.spec.ts b/frontend/src/metabase/parameters/utils/formatting.unit.spec.ts index 7c175e017b3..a7f244bd321 100644 --- a/frontend/src/metabase/parameters/utils/formatting.unit.spec.ts +++ b/frontend/src/metabase/parameters/utils/formatting.unit.spec.ts @@ -31,15 +31,35 @@ const remappedField = checkNotNull(metadata.field(REMAPPED_FIELD_ID)); describe("metabase/parameters/utils/formatting", () => { describe("formatParameterValue", () => { const cases = [ + { + type: "date/single", + value: "2018-01-01", + expected: "January 1, 2018", + }, + { + type: "date/single", + value: "2018-01-01T12:30:00", + expected: "January 1, 2018 12:30 PM", + }, { type: "date/range", value: "1995-01-01~1995-01-10", expected: "January 1, 1995 - January 10, 1995", }, { - type: "date/single", - value: "2018-01-01", - expected: "January 1, 2018", + type: "date/range", + value: "2018-01-01T12:30:00~2018-01-10", + expected: "January 1, 2018 12:30 PM - January 10, 2018", + }, + { + type: "date/range", + value: "2018-01-01~2018-01-10T08:15:00", + expected: "January 1, 2018 - January 10, 2018 08:15 AM", + }, + { + type: "date/range", + value: "2018-01-01T12:30:00~2018-01-10T08:15:00", + expected: "January 1, 2018 12:30 PM - January 10, 2018 08:15 AM", }, { type: "date/all-options", -- GitLab