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 833d5c8064b0d75e3cf4a1f37d7b115da92a8b90..aa069cceeeaab2785ae5b940a65b038219fd121a 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 a0740c324f75714cc145d35fd696e301f7a5b1a6..11529baf3ca6940331c591ea28317746e63f1e85 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 7c175e017b35156a99d53e2f4be6dd76ad94c591..a7f244bd32165fa924fbc732bc6fb540baef9d62 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",