Skip to content

Commit 1702778

Browse files
authored
Merge pull request #73 from ungdev/dev
Fix : UTC date and email to single User
2 parents 3b7bdc4 + 1ed74ad commit 1702778

File tree

3 files changed

+47
-26
lines changed

3 files changed

+47
-26
lines changed

frontend/src/components/Admin/AdminPerm/adminPermForm.tsx

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { getUsers } from "../../../services/requests/user.service";
1515

1616
import { Permanence } from "../../../interfaces/permanence.interface";
1717
import { User } from "../../../interfaces/user.interface";
18-
import { formatDateForInput } from "../../utils/datetime_utils";
18+
import { formatDateForDB, formatDateForInput } from "../../utils/datetime_utils";
1919

2020
interface PermanenceFormProps {
2121
editMode: boolean;
@@ -58,8 +58,8 @@ const PermanenceForm = ({
5858
setName(editPermanence.name);
5959
setDesc(editPermanence.description);
6060
setLocation(editPermanence.location);
61-
setStartAt(formatDateForInput(editPermanence.start_at));
62-
setEndAt(formatDateForInput(editPermanence.end_at));
61+
setStartAt(formatDateForInput(editPermanence.start_at));
62+
setEndAt(formatDateForInput(editPermanence.end_at));
6363
setCapacity(editPermanence.capacity);
6464
setDifficulty(editPermanence.difficulty);
6565
if (editPermanence.respo) {
@@ -82,29 +82,30 @@ const PermanenceForm = ({
8282
return;
8383
}
8484

85-
const respoId =
86-
respo && !isNaN(Number(respo.userId)) ? Number(respo.userId) : null;
85+
86+
let respoId = respo && !isNaN(Number(respo.userId)) ? Number(respo.userId) : null;
87+
8788

8889
try {
8990
const payload = {
9091
name,
9192
description: desc,
9293
location,
93-
start_at: formatDateForInput(startAt),
94-
end_at: formatDateForInput(endAt),
94+
start_at: formatDateForDB(startAt), // ✅ en UTC
95+
end_at: formatDateForDB(endAt), // ✅ en UTC
9596
capacity,
9697
difficulty,
9798
respoId,
9899
};
99-
100-
if (editMode && editPermanence) {
101-
await updatePermanence(editPermanence.id, payload);
102-
Swal.fire("Succès", "Permanence mise à jour", "success");
103-
onCancelEdit();
104-
} else {
105-
await createPermanence(payload);
106-
Swal.fire("Succès", "Permanence créée", "success");
107-
}
100+
101+
if (editMode && editPermanence) {
102+
await updatePermanence(editPermanence.id, payload);
103+
Swal.fire("Succès", "Permanence mise à jour", "success");
104+
onCancelEdit();
105+
} else {
106+
await createPermanence(payload);
107+
Swal.fire("Succès", "Permanence créée", "success");
108+
}
108109

109110
resetForm();
110111
onRefresh();

frontend/src/components/utils/datetime_utils.ts

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,39 @@
1-
// Pour l'input datetime-local
1+
// Pour préremplir un <input type="datetime-local">
2+
// On reçoit une date en UTC (string ISO venant de la DB)
3+
// On la convertit en locale (Europe/Paris) et on renvoie une string sans timezone
24
export const formatDateForInput = (date?: string | null) => {
35
if (!date) return "";
46
const localDate = new Date(date);
5-
if (isNaN(localDate.getTime())) return ""; // date invalide
6-
const offsetDate = new Date(localDate.getTime() - localDate.getTimezoneOffset() * 60000);
7-
return offsetDate.toISOString().slice(0, 16);
7+
if (isNaN(localDate.getTime())) return "";
8+
9+
// Construire YYYY-MM-DDTHH:mm en LOCAL
10+
const year = localDate.getFullYear();
11+
const month = String(localDate.getMonth() + 1).padStart(2, "0");
12+
const day = String(localDate.getDate()).padStart(2, "0");
13+
const hours = String(localDate.getHours()).padStart(2, "0");
14+
const minutes = String(localDate.getMinutes()).padStart(2, "0");
15+
16+
return `${year}-${month}-${day}T${hours}:${minutes}`;
17+
};
18+
19+
20+
// Pour envoyer vers la DB
21+
// On reçoit une string "YYYY-MM-DDTHH:mm" venant de l'input datetime-local
22+
// On la convertit en UTC ISO (toujours ce que ta DB attend)
23+
export const formatDateForDB = (inputValue?: string | null) => {
24+
if (!inputValue) return null;
25+
const localDate = new Date(inputValue); // interprété en local
26+
if (isNaN(localDate.getTime())) return null;
27+
return localDate.toISOString(); // UTC
828
};
929

10-
// Pour affichage lisible en français
30+
// Pour affichage lisible en français (Europe/Paris)
1131
export const formatDateForDisplay = (date?: string | null) => {
1232
if (!date) return "";
1333
const localDate = new Date(date);
1434
if (isNaN(localDate.getTime())) return "";
1535
return localDate.toLocaleString("fr-FR", {
16-
timeZone: "Europe/Paris", // évite les surprises
36+
timeZone: "Europe/Paris",
1737
weekday: "long",
1838
year: "numeric",
1939
month: "long",

frontend/src/services/requests/permanence.service.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ export const createPermanence = async (permanenceData: {
2929
name: string;
3030
description: string;
3131
location: string;
32-
start_at: string;
33-
end_at: string;
32+
start_at: string | null;
33+
end_at: string | null;
3434
capacity: number;
3535
difficulty : number;
3636
respoId: number | null;
@@ -88,8 +88,8 @@ export const updatePermanence = async ( permId: number, permanenceData: {
8888
name: string;
8989
description: string;
9090
location: string;
91-
start_at: string;
92-
end_at: string;
91+
start_at: string | null;
92+
end_at: string | null;
9393
capacity: number;
9494
difficulty : number;
9595
respoId: number | null;

0 commit comments

Comments
 (0)