Apptiva Logo

Date-Strings statt Date-Objekten

Wir haben gemerkt, dass Date-Strings eine gute Alternative zu JavaScript-Dates sind. Vor allem beim Speichern in der Datenbank mit Prisma.

Publiziert am von Patrik Stutz

Wann?

Wenn mit Dates ohne Zeitangabe gearbeitet wird

Problem von Dates mit Prisma

  • Dates ohne Zeit, werden trotzdem mit Zeit in der DB gespeichert
  • Dabei kann es zu Zeitzonen Problemen kommen
  • Beim speichern muss immer darauf geachtet werden, dass keine Zeitinformation in die Datenbank gelangt

Kann man trotzdem noch in der DB filtern?

Ja, es muss nur sichergestellt werden, dass die Dates immer die selbe länge haben!

  • Gut: '2022-01-01' < '2022-01-02'
  • Schlecht: '2022-01-1' < '2022-01-02'

Nachteile von Date-Strings

  • Es muss validiert werden, dass der string wirklich ein Date ist -> Zod hilft
  • Performance?

Validierung & Branding

type DateString = string & { readonly __type: unique symbol };

const DateStringSchema = z
.string()
.refine<DateString>((v): v is DateString =>
/[0-9]{4}-[0-9]{2}-[0-9]{2}/.test(v)
);

const date = DateStringSchema.parse("2023-02-27");


Temporal API

Sobald Prisma die Temporal API unterstützt sollte sich dieses Thema eigentlich erledigen. Solange dies aber nicht der Fall ist, sind Date-Strings womöglich die bessere Wahl.