diff --git a/src/app/core/entity/schema-datatypes/datatype-date-only.spec.ts b/src/app/core/entity/schema-datatypes/datatype-date-only.spec.ts index e4c9b0aa44..0f14344d5d 100644 --- a/src/app/core/entity/schema-datatypes/datatype-date-only.spec.ts +++ b/src/app/core/entity/schema-datatypes/datatype-date-only.spec.ts @@ -2,9 +2,23 @@ import { dateOnlyEntitySchemaDatatype } from "./datatype-date-only"; describe("Schema data type:Date", () => { it("should not fail on null values", () => { - const nullDateRes = dateOnlyEntitySchemaDatatype.transformToDatabaseFormat( - null - ); + const nullDateRes = + dateOnlyEntitySchemaDatatype.transformToDatabaseFormat(null); expect(nullDateRes).toBeUndefined(); }); + + it("should correctly transform values", () => { + const date = new Date(2022, 0, 1); + + const dbFormat = + dateOnlyEntitySchemaDatatype.transformToDatabaseFormat(date); + expect(dbFormat).toBe("2022-01-01"); + + const objFormat: Date = + dateOnlyEntitySchemaDatatype.transformToObjectFormat(dbFormat); + expect(objFormat).toBeInstanceOf(Date); + expect(objFormat.getFullYear()).toBe(2022); + expect(objFormat.getMonth()).toBe(0); + expect(objFormat.getDate()).toBe(1); + }); }); diff --git a/src/app/core/entity/schema-datatypes/datatype-date-only.ts b/src/app/core/entity/schema-datatypes/datatype-date-only.ts index 1288e49617..0e97dd4bca 100644 --- a/src/app/core/entity/schema-datatypes/datatype-date-only.ts +++ b/src/app/core/entity/schema-datatypes/datatype-date-only.ts @@ -44,8 +44,11 @@ export const dateOnlyEntitySchemaDatatype: EntitySchemaDatatype = { ); }, - transformToObjectFormat: (value) => { - const date = new Date(value); + transformToObjectFormat: (value: string) => { + // new Date("2022-01-01") is interpreted as UTC time whereas new Date(2022, 0, 1) is local time + // -> we want local time to represent the same day wherever used. + const values = value.split("-").map((v) => Number(v)); + const date = new Date(values[0], values[1] - 1, values[2]); if (Number.isNaN(date.getTime())) { throw new Error("failed to convert data to Date object: " + value); } diff --git a/src/app/core/entity/schema-datatypes/datatype-month.ts b/src/app/core/entity/schema-datatypes/datatype-month.ts index 26c7a554e5..7e57dca6b8 100644 --- a/src/app/core/entity/schema-datatypes/datatype-month.ts +++ b/src/app/core/entity/schema-datatypes/datatype-month.ts @@ -40,12 +40,9 @@ export const monthEntitySchemaDatatype: EntitySchemaDatatype = { ); }, - transformToObjectFormat: (value) => { - value = value - .toString() - .replace(/-(\d)-/g, "-0$1-") - .replace(/-(\d)$/g, "-0$1"); - const date = new Date(value); + transformToObjectFormat: (value: string) => { + const values = value.split("-").map((v) => Number(v)); + const date = new Date(values[0], values[1] - 1); if (Number.isNaN(date.getTime())) { throw new Error("failed to convert data to Date object: " + value); }