diff --git a/package.json b/package.json index 0e25e0535a..77921afe54 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "crypto-browserify": "^3.12.0", "csvtojson": "^2.0.10", "date-fns": "^2.28.0", + "date-fns-tz": "^1.3.7", "dedent": "^0.7.0", "dotenv": "^9.0.2", "eslint": "^7.5.0", diff --git a/src/components/ContestTile.js b/src/components/ContestTile.js index 07b7227737..117bcb9688 100644 --- a/src/components/ContestTile.js +++ b/src/components/ContestTile.js @@ -6,6 +6,7 @@ import { getDates } from "../utils/time"; import ClientOnly from "./ClientOnly"; import Countdown from "./Countdown"; import SponsorLink from "./SponsorLink"; +import { format } from "date-fns"; const ContestTile = ({ contest, updateContestStatus, user }) => { const { @@ -58,7 +59,13 @@ const ContestTile = ({ contest, updateContestStatus, user }) => { {t.contestStatus === "soon" || t.contestStatus === "active" ? (
  • - {t.contestStatus === "soon" ? "Starts:" : "Ends:"} + {/* @todo: style these dates */} + {t.contestStatus === "active" && ( + Ends {t.endTime} + )} + {t.contestStatus === "soon" && ( + Starts {t.startTime} + )} { @@ -66,6 +69,24 @@ const getDates = (start, end) => { } const daysDuration = differenceInCalendarDays(endDate, startDate); + const parsedEndTime = parseISO(end); + const parsedStartTime = parseISO(start); + const endUtc = format( + utcToZonedTime(parsedEndTime, "UTC"), + "d MMMM - h:mm a zzz", + { + timeZone: "UTC", + } + ); + const startUtc = format( + utcToZonedTime(parsedStartTime, "UTC"), + "d MMMM - h:mm a zzz", + { + timeZone: "UTC", + } + ); + const endLocal = format(endDate, "(d MMMM - h:mm a zzz)"); + const startLocal = format(startDate, "(d MMMM - h:mm a zzz)"); const t = { contestStatus, @@ -73,6 +94,8 @@ const getDates = (start, end) => { end: endTime, startDay: isValid(startDate) ? format(startDate, "d MMMM yyyy") : "", endDay: isValid(endDate) ? format(endDate, "d MMMM yyyy") : "", + startTime: isValid(startDate) ? startUtc + " " + startLocal : "", + endTime: isValid(endDate) ? endUtc + " " + endLocal : "", daysDuration, }; diff --git a/yarn.lock b/yarn.lock index 57c9963460..f214f490a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6834,6 +6834,11 @@ dataloader@^1.4.0: resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8" integrity sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw== +date-fns-tz@^1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/date-fns-tz/-/date-fns-tz-1.3.7.tgz#e8e9d2aaceba5f1cc0e677631563081fdcb0e69a" + integrity sha512-1t1b8zyJo+UI8aR+g3iqr5fkUHWpd58VBx8J/ZSQ+w7YrGlw80Ag4sA86qkfCXRBLmMc4I2US+aPMd4uKvwj5g== + date-fns@^1.27.2: version "1.30.1" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"