Skip to content

Commit 7bc30e7

Browse files
committed
fix: timezone date handling
1 parent 8eb8344 commit 7bc30e7

File tree

7 files changed

+13
-9
lines changed

7 files changed

+13
-9
lines changed

apps/frontend/src/routes/_auth/administration/participants/edit.$id.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { $api } from "../../../../stores/api";
33
import { useQueryClient, useSuspenseQuery } from "@tanstack/react-query";
44
import { Button, DateInput, Stack, TextInput, useForm } from "@quassel/ui";
55
import { useEffect } from "react";
6+
import { toMantineUTCDate } from "@quassel/utils";
67

78
type FormValues = {
89
id: string;
@@ -39,7 +40,7 @@ function AdministrationParticipantsEdit() {
3940
useEffect(() => {
4041
const { birthday, id } = participant.data;
4142

42-
f.setValues({ birthday, id: id.toString() });
43+
f.setValues({ birthday: birthday && toMantineUTCDate(birthday), id: id.toString() });
4344
}, [participant.isSuccess, participant.data]);
4445

4546
return (

apps/frontend/src/routes/_auth/administration/participants/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ function AdministrationParticipantsIndex() {
4343
{participants.data?.map((p) => (
4444
<Table.Tr key={p.id}>
4545
<Table.Td>{p.id}</Table.Td>
46-
<Table.Td>{p.birthday && time(new Date(p.birthday))}</Table.Td>
46+
<Table.Td>{p.birthday && time(new Date(p.birthday), { timeZone: "UTC" })}</Table.Td>
4747
<Table.Td>
4848
<Button variant="default" renderRoot={(props) => <Link to={`/administration/participants/edit/${p.id}`} {...props} />}>
4949
Edit

apps/frontend/src/routes/_auth/administration/questionnaires/edit.$id.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { useEffect } from "react";
66
import { QuestionnaireEntries } from "../../../../components/questionnaire/QuestionnaireEntries";
77
import { format, i18n } from "../../../../stores/i18n";
88
import { useStore } from "@nanostores/react";
9+
import { toMantineUTCDate } from "@quassel/utils";
910

1011
type FormValues = {
1112
startedAt: string;
@@ -57,7 +58,7 @@ function AdministrationQuestionnairesEdit() {
5758
};
5859

5960
useEffect(() => {
60-
f.initialize(data);
61+
f.initialize({ ...data, startedAt: toMantineUTCDate(data.startedAt), endedAt: toMantineUTCDate(data.endedAt) });
6162
}, [isSuccess, data]);
6263

6364
return (
@@ -67,7 +68,7 @@ function AdministrationQuestionnairesEdit() {
6768
<Table.Tr>
6869
<Table.Th>{t.labelParticipant}</Table.Th>
6970
<Table.Td>{data.participant.id}</Table.Td>
70-
<Table.Td>{data.participant.birthday && time(new Date(data.participant.birthday))}</Table.Td>
71+
<Table.Td>{data.participant.birthday && time(new Date(data.participant.birthday), { timeZone: "UTC" })}</Table.Td>
7172
</Table.Tr>
7273
</Table.Tbody>
7374
</Table>

apps/frontend/src/routes/_auth/administration/studies/$id.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import { useQueryClient, useSuspenseQuery } from "@tanstack/react-query";
44
import { Stack, Table, Title, Button } from "@quassel/ui";
55
import { useStore } from "@nanostores/react";
66
import { $session } from "../../../../stores/session";
7+
import { format } from "../../../../stores/i18n";
78

89
function AdministrationStudiesEdit() {
10+
const { time } = useStore(format);
911
const sessionStore = useStore($session);
1012
const p = Route.useParams();
1113
const q = useQueryClient();
@@ -46,7 +48,7 @@ function AdministrationStudiesEdit() {
4648
{study.data?.participants.map((p) => (
4749
<Table.Tr key={p.id}>
4850
<Table.Td>{p.id}</Table.Td>
49-
<Table.Td>{p.birthday}</Table.Td>
51+
<Table.Td>{p.birthday && time(new Date(p.birthday), { timeZone: "UTC" })}</Table.Td>
5052
<Table.Td>
5153
{sessionStore.role === "ADMIN" && (
5254
<Button

apps/frontend/src/routes/_auth/questionnaire/_questionnaire/participant.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ function QuestionnaireParticipant() {
5757
<Table.Tr>
5858
<Table.Th>{t.participantLabel}</Table.Th>
5959
<Table.Td>{questionnaire?.participant.id}</Table.Td>
60-
<Table.Td>{birthday ? time(new Date(birthday)) : <i>{t.birthdateMissing}</i>}</Table.Td>
60+
<Table.Td>{birthday ? time(new Date(birthday), { timeZone: "UTC" }) : <i>{t.birthdateMissing}</i>}</Table.Td>
6161
</Table.Tr>
6262
<Table.Tr>
6363
<Table.Th>{t.studyLabel}</Table.Th>

libs/utils/src/date.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export function formatDate(date: Date, dayjsFormatTemplate: string) {
1212
}
1313

1414
export const getTime = (date: Date) => formatDate(date, "HH:mm");
15+
export const toMantineUTCDate = (date: string) => dayjs(date).utc().format("YYYY-MM-DD");
1516

1617
export const getNext = (unit: dayjs.ManipulateType, date: Date) => dayjs(date).utc().add(1, unit).startOf(unit).toDate();
1718

libs/utils/src/index.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
export { formatDate, getTime, getDateFromTimeAndWeekday, getNext, isSameOrAfter, isSame, getStartOf, getEndOf } from "./date";
2-
3-
export { type Gap, type GapsPerDay, groupByWeekday, resolveGaps, entriesByInterval } from "./entry";
1+
export * from "./date";
2+
export * from "./entry";

0 commit comments

Comments
 (0)