diff --git a/base/schema-typescript-zod/test/inputs/schema/date-time-or-string.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/date-time-or-string.schema/default/TopLevel.ts
index db12fed..d43530c 100644
--- a/base/schema-typescript-zod/test/inputs/schema/date-time-or-string.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/date-time-or-string.schema/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const BarEnumSchema = z.enum([
     "quux",
@@ -7,7 +9,7 @@ export const BarEnumSchema = z.enum([
 export type BarEnum = z.infer<typeof BarEnumSchema>;
 
 export const TopLevelSchema = z.object({
-    "bar": z.union([BarEnumSchema, z.string().pipe(z.coerce.date())]),
+    "bar": z.union([BarEnumSchema, dateTimeSchema]),
     "foo": z.string(),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/schema-typescript-zod/test/inputs/schema/date-time.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/date-time.schema/default/TopLevel.ts
index 9aaffab..c8bd98e 100644
--- a/base/schema-typescript-zod/test/inputs/schema/date-time.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/date-time.schema/default/TopLevel.ts
@@ -1,5 +1,9 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
+const timeSchema = z.string().regex(/^(?:[01]\d|2[0-3]):[0-5]\d:(?:[0-5]\d|60)(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d)$/i);
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const ComplexUnionArrayEnumSchema = z.enum([
     "foo",
@@ -20,13 +24,13 @@ export const OffsetTimeSchema = z.object({
 export type OffsetTime = z.infer<typeof OffsetTimeSchema>;
 
 export const TopLevelSchema = z.object({
-    "complex-union-array": z.array(z.union([ComplexUnionArrayEnumSchema, z.number().int(), z.string().pipe(z.coerce.date())])),
-    "date": z.string(),
-    "date-time": z.string().pipe(z.coerce.date()),
+    "complex-union-array": z.array(z.union([ComplexUnionArrayEnumSchema, z.number().int(), dateTimeSchema])),
+    "date": dateSchema,
+    "date-time": dateTimeSchema,
     "local-date-class": LocalDateSchema.optional(),
     "offset-date-time-class": OffsetDateTimeSchema.optional(),
     "offset-time-class": OffsetTimeSchema.optional(),
-    "time": z.string(),
-    "union-array": z.array(z.string()),
+    "time": timeSchema,
+    "union-array": z.array(z.union([dateSchema, timeSchema, dateTimeSchema])),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/schema-typescript-zod/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts
index 502a52e..c1fe9f6 100644
--- a/base/schema-typescript-zod/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts
@@ -1,12 +1,15 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
+const timeSchema = z.string().regex(/^(?:[01]\d|2[0-3]):[0-5]\d:(?:[0-5]\d|60)(?:\.\d+)?(?:Z|[+-](?:[01]\d|2[0-3]):[0-5]\d)$/i);
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const TopLevelSchema = z.object({
-    "optional-date": z.string().optional(),
-    "optional-date-time": z.string().pipe(z.coerce.date()).optional(),
-    "optional-time": z.string().optional(),
-    "required-date": z.string(),
-    "required-date-time": z.string().pipe(z.coerce.date()),
-    "required-time": z.string(),
+    "optional-date": dateSchema.optional(),
+    "optional-date-time": dateTimeSchema.optional(),
+    "optional-time": timeSchema.optional(),
+    "required-date": dateSchema,
+    "required-date-time": dateTimeSchema,
+    "required-time": timeSchema,
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/016af.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/016af.json/default/TopLevel.ts
index 3c5684f..2d1d1b4 100644
--- a/base/typescript-zod/test/inputs/json/misc/016af.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/016af.json/default/TopLevel.ts
@@ -1,8 +1,9 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TotalPopulationSchema = z.object({
-    "date": z.string(),
+    "date": dateSchema,
     "population": z.number().int(),
 });
 export type TotalPopulation = z.infer<typeof TotalPopulationSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/033b1.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/033b1.json/default/TopLevel.ts
index f170e37..c2e85d3 100644
--- a/base/typescript-zod/test/inputs/json/misc/033b1.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/033b1.json/default/TopLevel.ts
@@ -1,9 +1,10 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
-    "date": z.string(),
+    "date": dateSchema,
     "rates": z.record(z.string(), z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/0a358.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/0a358.json/default/TopLevel.ts
index 0895699..46b466b 100644
--- a/base/typescript-zod/test/inputs/json/misc/0a358.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/0a358.json/default/TopLevel.ts
@@ -1,5 +1,6 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const FacetsSchema = z.object({
 });
@@ -7,10 +8,10 @@ export type Facets = z.infer<typeof FacetsSchema>;
 
 export const ResultSchema = z.object({
     "code": z.string(),
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "id": z.number().int(),
     "name": z.string(),
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "uri": z.string(),
 });
 export type Result = z.infer<typeof ResultSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/0a91a.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/0a91a.json/default/TopLevel.ts
index 48a93c4..aa00c4a 100644
--- a/base/typescript-zod/test/inputs/json/misc/0a91a.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/0a91a.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const TypeSchema = z.enum([
     "PushEvent",
@@ -80,7 +82,7 @@ export const BaseRepoSchema = z.object({
     "compare_url": z.string(),
     "contents_url": z.string(),
     "contributors_url": z.string(),
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "default_branch": z.string(),
     "deployments_url": z.string(),
     "description": z.null(),
@@ -121,7 +123,7 @@ export const BaseRepoSchema = z.object({
     "owner": MergedBySchema,
     "private": z.boolean(),
     "pulls_url": z.string(),
-    "pushed_at": z.string().pipe(z.coerce.date()),
+    "pushed_at": dateTimeSchema,
     "releases_url": z.string(),
     "size": z.number().int(),
     "ssh_url": z.string(),
@@ -134,7 +136,7 @@ export const BaseRepoSchema = z.object({
     "tags_url": z.string(),
     "teams_url": z.string(),
     "trees_url": z.string(),
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "url": z.string(),
     "watchers": z.number().int(),
     "watchers_count": z.number().int(),
@@ -169,12 +171,12 @@ export const PullRequestSchema = z.object({
     "base": BaseSchema,
     "body": z.string(),
     "changed_files": z.number().int(),
-    "closed_at": z.string().pipe(z.coerce.date()),
+    "closed_at": dateTimeSchema,
     "comments": z.number().int(),
     "comments_url": z.string(),
     "commits": z.number().int(),
     "commits_url": z.string(),
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "deletions": z.number().int(),
     "diff_url": z.string(),
     "head": BaseSchema,
@@ -188,7 +190,7 @@ export const PullRequestSchema = z.object({
     "mergeable": z.null(),
     "mergeable_state": z.string(),
     "merged": z.boolean(),
-    "merged_at": z.string().pipe(z.coerce.date()),
+    "merged_at": dateTimeSchema,
     "merged_by": MergedBySchema,
     "milestone": z.null(),
     "number": z.number().int(),
@@ -201,7 +203,7 @@ export const PullRequestSchema = z.object({
     "state": z.string(),
     "statuses_url": z.string(),
     "title": z.string(),
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "url": z.string(),
     "user": MergedBySchema,
 });
@@ -227,7 +229,7 @@ export type Payload = z.infer<typeof PayloadSchema>;
 
 export const TopLevelElementSchema = z.object({
     "actor": ActorSchema,
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "id": z.string(),
     "org": ActorSchema.optional(),
     "payload": PayloadSchema,
diff --git a/base/typescript-zod/test/inputs/json/misc/0e0c2.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/0e0c2.json/default/TopLevel.ts
index adb9482..43bd7cc 100644
--- a/base/typescript-zod/test/inputs/json/misc/0e0c2.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/0e0c2.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
+
 
 export const DetailLanguageSchema = z.enum([
     "en",
@@ -80,7 +82,7 @@ export const ResultSchema = z.object({
     "id": z.number().int(),
     "images": z.array(ImageSchema),
     "language": ResultLanguageSchema,
-    "release_date": z.string(),
+    "release_date": dateSchema,
     "stars": z.number().int(),
     "tags": z.union([z.null(), z.array(z.any())]),
     "title": z.string(),
diff --git a/base/typescript-zod/test/inputs/json/misc/167d6.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/167d6.json/default/TopLevel.ts
index f170e37..c2e85d3 100644
--- a/base/typescript-zod/test/inputs/json/misc/167d6.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/167d6.json/default/TopLevel.ts
@@ -1,9 +1,10 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
-    "date": z.string(),
+    "date": dateSchema,
     "rates": z.record(z.string(), z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/16bc5.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/16bc5.json/default/TopLevel.ts
index ddf9ef4..66b5c57 100644
--- a/base/typescript-zod/test/inputs/json/misc/16bc5.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/16bc5.json/default/TopLevel.ts
@@ -1,5 +1,6 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const AstronomySchema = z.object({
     "sunrise": z.string(),
@@ -106,7 +107,7 @@ export type Results = z.infer<typeof ResultsSchema>;
 
 export const QuerySchema = z.object({
     "count": z.number().int(),
-    "created": z.string().pipe(z.coerce.date()),
+    "created": dateTimeSchema,
     "lang": z.string(),
     "results": ResultsSchema,
 });
diff --git a/base/typescript-zod/test/inputs/json/misc/1b28c.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/1b28c.json/default/TopLevel.ts
index 3c5684f..2d1d1b4 100644
--- a/base/typescript-zod/test/inputs/json/misc/1b28c.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/1b28c.json/default/TopLevel.ts
@@ -1,8 +1,9 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TotalPopulationSchema = z.object({
-    "date": z.string(),
+    "date": dateSchema,
     "population": z.number().int(),
 });
 export type TotalPopulation = z.infer<typeof TotalPopulationSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/1b409.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/1b409.json/default/TopLevel.ts
index 39e2bf8..e320d58 100644
--- a/base/typescript-zod/test/inputs/json/misc/1b409.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/1b409.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
+
 
 export const PartySchema = z.enum([
     "Republican",
@@ -70,7 +72,7 @@ export type Extra = z.infer<typeof ExtraSchema>;
 
 export const PersonSchema = z.object({
     "bioguideid": z.string(),
-    "birthday": z.string(),
+    "birthday": dateSchema,
     "cspanid": z.number().int(),
     "firstname": z.string(),
     "gender": GenderSchema,
@@ -96,7 +98,7 @@ export const ObjectElementSchema = z.object({
     "current": z.boolean(),
     "description": z.string(),
     "district": z.number().int(),
-    "enddate": z.string(),
+    "enddate": dateSchema,
     "extra": ExtraSchema,
     "id": z.number().int(),
     "leadership_title": z.union([z.null(), z.string()]),
@@ -107,7 +109,7 @@ export const ObjectElementSchema = z.object({
     "role_type_label": RoleTypeLabelSchema,
     "senator_class": z.null(),
     "senator_rank": z.null(),
-    "startdate": z.string(),
+    "startdate": dateSchema,
     "state": z.string(),
     "title": TitleSchema,
     "title_long": RoleTypeLabelSchema,
diff --git a/base/typescript-zod/test/inputs/json/misc/262f0.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/262f0.json/default/TopLevel.ts
index 7b65d99..5c942ff 100644
--- a/base/typescript-zod/test/inputs/json/misc/262f0.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/262f0.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const TextSchema = z.enum([
     "Mostly Cloudy",
@@ -113,7 +115,7 @@ export type Results = z.infer<typeof ResultsSchema>;
 
 export const QuerySchema = z.object({
     "count": z.number().int(),
-    "created": z.string().pipe(z.coerce.date()),
+    "created": dateTimeSchema,
     "lang": z.string(),
     "results": ResultsSchema,
 });
diff --git a/base/typescript-zod/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts
index 0deef1f..be6e0f9 100644
--- a/base/typescript-zod/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
+
 
 export const PartySchema = z.enum([
     "Republican",
@@ -96,7 +98,7 @@ export type Extra = z.infer<typeof ExtraSchema>;
 
 export const PersonSchema = z.object({
     "bioguideid": z.string(),
-    "birthday": z.string(),
+    "birthday": dateSchema,
     "cspanid": z.number().int(),
     "firstname": z.string(),
     "gender": GenderSchema,
@@ -122,7 +124,7 @@ export const ObjectElementSchema = z.object({
     "current": z.boolean(),
     "description": z.string(),
     "district": z.null(),
-    "enddate": z.string(),
+    "enddate": dateSchema,
     "extra": ExtraSchema,
     "id": z.number().int(),
     "leadership_title": z.union([z.null(), z.string()]),
@@ -135,7 +137,7 @@ export const ObjectElementSchema = z.object({
     "senator_class_label": SenatorClassLabelSchema,
     "senator_rank": SenatorRankSchema,
     "senator_rank_label": SenatorRankLabelSchema,
-    "startdate": z.string(),
+    "startdate": dateSchema,
     "state": z.string(),
     "title": TitleSchema,
     "title_long": RoleTypeLabelSchema,
diff --git a/base/typescript-zod/test/inputs/json/misc/31189.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/31189.json/default/TopLevel.ts
index a7a72ec..8bf5ebf 100644
--- a/base/typescript-zod/test/inputs/json/misc/31189.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/31189.json/default/TopLevel.ts
@@ -1,5 +1,12 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
+
+
+export const EffectiveFromEnumSchema = z.enum([
+    "0000-01-01",
+]);
+export type EffectiveFromEnum = z.infer<typeof EffectiveFromEnumSchema>;
 
 export const RatesSchema = z.object({
     "parking": z.number().optional(),
@@ -12,7 +19,7 @@ export const RatesSchema = z.object({
 export type Rates = z.infer<typeof RatesSchema>;
 
 export const PeriodSchema = z.object({
-    "effective_from": z.string(),
+    "effective_from": z.union([dateSchema, EffectiveFromEnumSchema]),
     "rates": RatesSchema,
 });
 export type Period = z.infer<typeof PeriodSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/32d5c.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/32d5c.json/default/TopLevel.ts
index 10502b1..306c0f4 100644
--- a/base/typescript-zod/test/inputs/json/misc/32d5c.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/32d5c.json/default/TopLevel.ts
@@ -1,8 +1,9 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const TopLevelElementSchema = z.object({
-    "BirthDate": z.union([z.null(), z.string().pipe(z.coerce.date())]),
+    "BirthDate": z.union([z.null(), dateTimeSchema]),
     "BirthDateIsProtected": z.boolean(),
     "GenderTypeID": z.number().int(),
     "Notes": z.string(),
diff --git a/base/typescript-zod/test/inputs/json/misc/337ed.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/337ed.json/default/TopLevel.ts
index 1c59915..01d7e37 100644
--- a/base/typescript-zod/test/inputs/json/misc/337ed.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/337ed.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const StatusSchema = z.enum([
     "active",
@@ -28,12 +30,12 @@ export type Facets = z.infer<typeof FacetsSchema>;
 
 export const CustomIncomeSchema = z.object({
     "amount": z.number().int(),
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "id": z.string(),
     "name": z.string(),
     "status": StatusSchema,
     "type": CustomIncomeTypeSchema,
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "uri": z.string(),
 });
 export type CustomIncome = z.infer<typeof CustomIncomeSchema>;
@@ -42,11 +44,11 @@ export const ResultSchema = z.object({
     "cost_absolute": z.union([z.null(), z.number().int()]),
     "cost_max": z.union([z.null(), z.number().int()]),
     "cost_min": z.union([z.null(), z.number().int()]),
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "customIncomes": z.array(CustomIncomeSchema),
     "direct_rep_costs_max": z.null(),
     "direct_rep_costs_min": z.null(),
-    "end_date": z.string().pipe(z.coerce.date()),
+    "end_date": dateTimeSchema,
     "eur_sources_grants": z.number().int(),
     "eur_sources_grants_src": z.union([z.null(), z.string()]),
     "eur_sources_procurement": z.number().int(),
@@ -62,14 +64,14 @@ export const ResultSchema = z.object({
     "public_financing_national": z.union([z.null(), z.number().int()]),
     "public_financing_total": z.union([z.null(), z.number().int()]),
     "representative": z.string(),
-    "start_date": z.string().pipe(z.coerce.date()),
+    "start_date": dateTimeSchema,
     "status": StatusSchema,
     "total_budget": z.union([z.null(), z.number().int()]),
     "turnover_absolute": z.union([z.null(), z.number().int()]),
     "turnover_max": z.union([z.null(), z.number().int()]),
     "turnover_min": z.union([z.null(), z.number().int()]),
     "type": ResultTypeSchema,
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "uri": z.string(),
 });
 export type Result = z.infer<typeof ResultSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/33d2e.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/33d2e.json/default/TopLevel.ts
index bc6817f..1597852 100644
--- a/base/typescript-zod/test/inputs/json/misc/33d2e.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/33d2e.json/default/TopLevel.ts
@@ -1,5 +1,15 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
+
+
+export const BornEnumSchema = z.enum([
+    "0000-00-00",
+    "1898-00-00",
+    "1943-00-00",
+]);
+export type BornEnum = z.infer<typeof BornEnumSchema>;
+
 
 export const GenderSchema = z.enum([
     "male",
@@ -37,11 +47,11 @@ export const PrizeSchema = z.object({
 export type Prize = z.infer<typeof PrizeSchema>;
 
 export const LaureateSchema = z.object({
-    "born": z.string(),
+    "born": z.union([dateSchema, BornEnumSchema]),
     "bornCity": z.string().optional(),
     "bornCountry": z.string().optional(),
     "bornCountryCode": z.string().optional(),
-    "died": z.string(),
+    "died": z.union([dateSchema, BornEnumSchema]),
     "diedCity": z.string().optional(),
     "diedCountry": z.string().optional(),
     "diedCountryCode": z.string().optional(),
diff --git a/base/typescript-zod/test/inputs/json/misc/3659d.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/3659d.json/default/TopLevel.ts
index 3c5684f..2d1d1b4 100644
--- a/base/typescript-zod/test/inputs/json/misc/3659d.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/3659d.json/default/TopLevel.ts
@@ -1,8 +1,9 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TotalPopulationSchema = z.object({
-    "date": z.string(),
+    "date": dateSchema,
     "population": z.number().int(),
 });
 export type TotalPopulation = z.infer<typeof TotalPopulationSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/3f1ce.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/3f1ce.json/default/TopLevel.ts
index ae35dfa..a7202a3 100644
--- a/base/typescript-zod/test/inputs/json/misc/3f1ce.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/3f1ce.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const TextSchema = z.enum([
     "Thunderstorms",
@@ -111,7 +113,7 @@ export type Results = z.infer<typeof ResultsSchema>;
 
 export const QuerySchema = z.object({
     "count": z.number().int(),
-    "created": z.string().pipe(z.coerce.date()),
+    "created": dateTimeSchema,
     "lang": z.string(),
     "results": ResultsSchema,
 });
diff --git a/base/typescript-zod/test/inputs/json/misc/43eaf.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/43eaf.json/default/TopLevel.ts
index f170e37..c2e85d3 100644
--- a/base/typescript-zod/test/inputs/json/misc/43eaf.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/43eaf.json/default/TopLevel.ts
@@ -1,9 +1,10 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
-    "date": z.string(),
+    "date": dateSchema,
     "rates": z.record(z.string(), z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/4961a.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/4961a.json/default/TopLevel.ts
index 3c5684f..2d1d1b4 100644
--- a/base/typescript-zod/test/inputs/json/misc/4961a.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/4961a.json/default/TopLevel.ts
@@ -1,8 +1,9 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TotalPopulationSchema = z.object({
-    "date": z.string(),
+    "date": dateSchema,
     "population": z.number().int(),
 });
 export type TotalPopulation = z.infer<typeof TotalPopulationSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/4a0d7.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/4a0d7.json/default/TopLevel.ts
index 3c5684f..2d1d1b4 100644
--- a/base/typescript-zod/test/inputs/json/misc/4a0d7.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/4a0d7.json/default/TopLevel.ts
@@ -1,8 +1,9 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TotalPopulationSchema = z.object({
-    "date": z.string(),
+    "date": dateSchema,
     "population": z.number().int(),
 });
 export type TotalPopulation = z.infer<typeof TotalPopulationSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/4c547.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/4c547.json/default/TopLevel.ts
index ddf9ef4..66b5c57 100644
--- a/base/typescript-zod/test/inputs/json/misc/4c547.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/4c547.json/default/TopLevel.ts
@@ -1,5 +1,6 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const AstronomySchema = z.object({
     "sunrise": z.string(),
@@ -106,7 +107,7 @@ export type Results = z.infer<typeof ResultsSchema>;
 
 export const QuerySchema = z.object({
     "count": z.number().int(),
-    "created": z.string().pipe(z.coerce.date()),
+    "created": dateTimeSchema,
     "lang": z.string(),
     "results": ResultsSchema,
 });
diff --git a/base/typescript-zod/test/inputs/json/misc/4e336.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/4e336.json/default/TopLevel.ts
index 3c5684f..2d1d1b4 100644
--- a/base/typescript-zod/test/inputs/json/misc/4e336.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/4e336.json/default/TopLevel.ts
@@ -1,8 +1,9 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TotalPopulationSchema = z.object({
-    "date": z.string(),
+    "date": dateSchema,
     "population": z.number().int(),
 });
 export type TotalPopulation = z.infer<typeof TotalPopulationSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/54d32.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/54d32.json/default/TopLevel.ts
index 49820db..d88c8b9 100644
--- a/base/typescript-zod/test/inputs/json/misc/54d32.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/54d32.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const StatusSchema = z.enum([
     "inactive",
@@ -12,12 +14,12 @@ export const FacetsSchema = z.object({
 export type Facets = z.infer<typeof FacetsSchema>;
 
 export const ResultSchema = z.object({
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "id": z.string(),
     "person_id": z.string(),
     "representative_id": z.string(),
     "status": StatusSchema,
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
 });
 export type Result = z.infer<typeof ResultSchema>;
 
diff --git a/base/typescript-zod/test/inputs/json/misc/5eae5.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/5eae5.json/default/TopLevel.ts
index 80379a4..4781293 100644
--- a/base/typescript-zod/test/inputs/json/misc/5eae5.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/5eae5.json/default/TopLevel.ts
@@ -1,8 +1,9 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const TopLevelElementSchema = z.object({
-    "Date": z.string().pipe(z.coerce.date()),
+    "Date": dateTimeSchema,
     "ID": z.number().int(),
     "Sponsor": z.string(),
     "Title": z.string(),
diff --git a/base/typescript-zod/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts
index f170e37..c2e85d3 100644
--- a/base/typescript-zod/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts
@@ -1,9 +1,10 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
-    "date": z.string(),
+    "date": dateSchema,
     "rates": z.record(z.string(), z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/6260a.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/6260a.json/default/TopLevel.ts
index f170e37..c2e85d3 100644
--- a/base/typescript-zod/test/inputs/json/misc/6260a.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/6260a.json/default/TopLevel.ts
@@ -1,9 +1,10 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
-    "date": z.string(),
+    "date": dateSchema,
     "rates": z.record(z.string(), z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/65dec.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/65dec.json/default/TopLevel.ts
index 630e3b8..2672381 100644
--- a/base/typescript-zod/test/inputs/json/misc/65dec.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/65dec.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
+
 
 export const ColorIdentitySchema = z.enum([
     "W",
@@ -61,7 +63,7 @@ export const LegalityElementSchema = z.object({
 export type LegalityElement = z.infer<typeof LegalityElementSchema>;
 
 export const RulingSchema = z.object({
-    "date": z.string(),
+    "date": dateSchema,
     "text": z.string(),
 });
 export type Ruling = z.infer<typeof RulingSchema>;
@@ -108,7 +110,7 @@ export const TopLevelSchema = z.object({
     "mkm_id": z.number().int(),
     "mkm_name": z.string(),
     "name": z.string(),
-    "releaseDate": z.string(),
+    "releaseDate": dateSchema,
     "type": z.string(),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/6dec6.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/6dec6.json/default/TopLevel.ts
index 9007029..b02e5d8 100644
--- a/base/typescript-zod/test/inputs/json/misc/6dec6.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/6dec6.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const TextSchema = z.enum([
     "Showers",
@@ -113,7 +115,7 @@ export type Results = z.infer<typeof ResultsSchema>;
 
 export const QuerySchema = z.object({
     "count": z.number().int(),
-    "created": z.string().pipe(z.coerce.date()),
+    "created": dateTimeSchema,
     "lang": z.string(),
     "results": ResultsSchema,
 });
diff --git a/base/typescript-zod/test/inputs/json/misc/70c77.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/70c77.json/default/TopLevel.ts
index f170e37..c2e85d3 100644
--- a/base/typescript-zod/test/inputs/json/misc/70c77.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/70c77.json/default/TopLevel.ts
@@ -1,9 +1,10 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
-    "date": z.string(),
+    "date": dateSchema,
     "rates": z.record(z.string(), z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/734ad.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/734ad.json/default/TopLevel.ts
index 6438db2..db583df 100644
--- a/base/typescript-zod/test/inputs/json/misc/734ad.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/734ad.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const StatusSchema = z.enum([
     "active",
@@ -31,7 +33,7 @@ export const ResultSchema = z.object({
     "be_office_town": z.string().optional(),
     "code_of_conduct": z.string(),
     "contact_country": z.number().int(),
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "entity": z.string(),
     "goals": z.string(),
     "head": z.string(),
@@ -46,7 +48,7 @@ export const ResultSchema = z.object({
     "id": z.string(),
     "identification_code": z.string(),
     "info_members": z.string(),
-    "last_update_date": z.string().pipe(z.coerce.date()),
+    "last_update_date": dateTimeSchema,
     "legal": z.string(),
     "legal_status": z.string(),
     "main_category": z.number().int(),
@@ -62,12 +64,12 @@ export const ResultSchema = z.object({
     "networking": z.union([z.null(), z.string()]),
     "number_of_natural_persons": z.union([z.null(), z.number().int()]),
     "other_code_of_conduct": z.union([z.null(), z.string()]),
-    "registration_date": z.string().pipe(z.coerce.date()),
+    "registration_date": dateTimeSchema,
     "status": StatusSchema,
     "structure_members": z.string(),
     "sub_category": z.number().int(),
     "sub_category_title": z.string(),
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "uri": z.string(),
     "web_site_url": z.union([z.null(), z.string()]),
 });
diff --git a/base/typescript-zod/test/inputs/json/misc/75912.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/75912.json/default/TopLevel.ts
index f170e37..c2e85d3 100644
--- a/base/typescript-zod/test/inputs/json/misc/75912.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/75912.json/default/TopLevel.ts
@@ -1,9 +1,10 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
-    "date": z.string(),
+    "date": dateSchema,
     "rates": z.record(z.string(), z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/77392.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/77392.json/default/TopLevel.ts
index 7a85c82..b3732c8 100644
--- a/base/typescript-zod/test/inputs/json/misc/77392.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/77392.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const OrbitClassSchema = z.enum([
     "Apollo",
@@ -24,7 +26,7 @@ export type Pha = z.infer<typeof PhaSchema>;
 
 export const TopLevelElementSchema = z.object({
     "designation": z.string(),
-    "discovery_date": z.string().pipe(z.coerce.date()),
+    "discovery_date": dateTimeSchema,
     "h_mag": z.string().optional(),
     "i_deg": z.string(),
     "moid_au": z.string(),
diff --git a/base/typescript-zod/test/inputs/json/misc/7dfa6.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/7dfa6.json/default/TopLevel.ts
index 3c5684f..2d1d1b4 100644
--- a/base/typescript-zod/test/inputs/json/misc/7dfa6.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/7dfa6.json/default/TopLevel.ts
@@ -1,8 +1,9 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TotalPopulationSchema = z.object({
-    "date": z.string(),
+    "date": dateSchema,
     "population": z.number().int(),
 });
 export type TotalPopulation = z.infer<typeof TotalPopulationSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/7f568.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/7f568.json/default/TopLevel.ts
index a157d4f..a73b5ec 100644
--- a/base/typescript-zod/test/inputs/json/misc/7f568.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/7f568.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const LanguageSchema = z.enum([
     "Markdown",
@@ -25,7 +27,7 @@ export const TopLevelElementSchema = z.object({
     "comments": z.number().int(),
     "comments_url": z.string(),
     "commits_url": z.string(),
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "description": z.union([z.null(), z.string()]),
     "files": z.record(z.string(), FileSchema),
     "forks_url": z.string(),
@@ -35,7 +37,7 @@ export const TopLevelElementSchema = z.object({
     "id": z.string(),
     "public": z.boolean(),
     "truncated": z.boolean(),
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "url": z.string(),
     "user": z.null(),
 });
diff --git a/base/typescript-zod/test/inputs/json/misc/80aff.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/80aff.json/default/TopLevel.ts
index 5cd1f0e..f4c858c 100644
--- a/base/typescript-zod/test/inputs/json/misc/80aff.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/80aff.json/default/TopLevel.ts
@@ -1,17 +1,18 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const FacetsSchema = z.object({
 });
 export type Facets = z.infer<typeof FacetsSchema>;
 
 export const ResultSchema = z.object({
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "id": z.number().int(),
     "items": z.number().int(),
     "name": z.string(),
     "parent": z.union([z.null(), z.number().int()]),
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "uri": z.string(),
 });
 export type Result = z.infer<typeof ResultSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/88130.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/88130.json/default/TopLevel.ts
index ddf9ef4..66b5c57 100644
--- a/base/typescript-zod/test/inputs/json/misc/88130.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/88130.json/default/TopLevel.ts
@@ -1,5 +1,6 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const AstronomySchema = z.object({
     "sunrise": z.string(),
@@ -106,7 +107,7 @@ export type Results = z.infer<typeof ResultsSchema>;
 
 export const QuerySchema = z.object({
     "count": z.number().int(),
-    "created": z.string().pipe(z.coerce.date()),
+    "created": dateTimeSchema,
     "lang": z.string(),
     "results": ResultsSchema,
 });
diff --git a/base/typescript-zod/test/inputs/json/misc/8a62c.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/8a62c.json/default/TopLevel.ts
index 3c5684f..2d1d1b4 100644
--- a/base/typescript-zod/test/inputs/json/misc/8a62c.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/8a62c.json/default/TopLevel.ts
@@ -1,8 +1,9 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TotalPopulationSchema = z.object({
-    "date": z.string(),
+    "date": dateSchema,
     "population": z.number().int(),
 });
 export type TotalPopulation = z.infer<typeof TotalPopulationSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/9617f.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/9617f.json/default/TopLevel.ts
index f170e37..c2e85d3 100644
--- a/base/typescript-zod/test/inputs/json/misc/9617f.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/9617f.json/default/TopLevel.ts
@@ -1,9 +1,10 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
-    "date": z.string(),
+    "date": dateSchema,
     "rates": z.record(z.string(), z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/9929c.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/9929c.json/default/TopLevel.ts
index ddf9ef4..66b5c57 100644
--- a/base/typescript-zod/test/inputs/json/misc/9929c.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/9929c.json/default/TopLevel.ts
@@ -1,5 +1,6 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const AstronomySchema = z.object({
     "sunrise": z.string(),
@@ -106,7 +107,7 @@ export type Results = z.infer<typeof ResultsSchema>;
 
 export const QuerySchema = z.object({
     "count": z.number().int(),
-    "created": z.string().pipe(z.coerce.date()),
+    "created": dateTimeSchema,
     "lang": z.string(),
     "results": ResultsSchema,
 });
diff --git a/base/typescript-zod/test/inputs/json/misc/9ac3b.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/9ac3b.json/default/TopLevel.ts
index 2c57a9c..e9e6d87 100644
--- a/base/typescript-zod/test/inputs/json/misc/9ac3b.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/9ac3b.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const StatusSchema = z.enum([
     "inactive",
@@ -19,7 +21,7 @@ export const FacetsSchema = z.object({
 export type Facets = z.infer<typeof FacetsSchema>;
 
 export const ResultSchema = z.object({
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "entity": z.string(),
     "first_name": z.string(),
     "id": z.string(),
@@ -28,7 +30,7 @@ export const ResultSchema = z.object({
     "position": z.union([z.null(), z.string()]),
     "status": StatusSchema,
     "title": z.union([z.null(), TitleSchema]),
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "uri": z.string(),
 });
 export type Result = z.infer<typeof ResultSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/a0496.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/a0496.json/default/TopLevel.ts
index 922d483..f55a3c0 100644
--- a/base/typescript-zod/test/inputs/json/misc/a0496.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/a0496.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const ErrorsSchema = z.object({
 });
@@ -8,20 +10,20 @@ export type Errors = z.infer<typeof ErrorsSchema>;
 export const TopLevelSchema = z.object({
     "code": z.string(),
     "column_names": z.array(z.string()),
-    "data": z.array(z.array(z.union([z.null(), z.number(), z.string()]))),
+    "data": z.array(z.array(z.union([z.null(), dateSchema, z.number()]))),
     "description": z.string(),
     "display_url": z.string(),
     "errors": ErrorsSchema,
     "frequency": z.string(),
-    "from_date": z.string(),
+    "from_date": dateSchema,
     "id": z.number().int(),
     "name": z.string(),
     "premium": z.boolean(),
     "source_code": z.string(),
     "source_name": z.string(),
-    "to_date": z.string(),
+    "to_date": dateSchema,
     "type": z.string(),
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "urlize_name": z.string(),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/a1eca.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/a1eca.json/default/TopLevel.ts
index ddf9ef4..66b5c57 100644
--- a/base/typescript-zod/test/inputs/json/misc/a1eca.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/a1eca.json/default/TopLevel.ts
@@ -1,5 +1,6 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const AstronomySchema = z.object({
     "sunrise": z.string(),
@@ -106,7 +107,7 @@ export type Results = z.infer<typeof ResultsSchema>;
 
 export const QuerySchema = z.object({
     "count": z.number().int(),
-    "created": z.string().pipe(z.coerce.date()),
+    "created": dateTimeSchema,
     "lang": z.string(),
     "results": ResultsSchema,
 });
diff --git a/base/typescript-zod/test/inputs/json/misc/a9691.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/a9691.json/default/TopLevel.ts
index f170e37..c2e85d3 100644
--- a/base/typescript-zod/test/inputs/json/misc/a9691.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/a9691.json/default/TopLevel.ts
@@ -1,9 +1,10 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
-    "date": z.string(),
+    "date": dateSchema,
     "rates": z.record(z.string(), z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/abb4b.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/abb4b.json/default/TopLevel.ts
index 3c5684f..2d1d1b4 100644
--- a/base/typescript-zod/test/inputs/json/misc/abb4b.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/abb4b.json/default/TopLevel.ts
@@ -1,8 +1,9 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TotalPopulationSchema = z.object({
-    "date": z.string(),
+    "date": dateSchema,
     "population": z.number().int(),
 });
 export type TotalPopulation = z.infer<typeof TotalPopulationSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/ac944.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/ac944.json/default/TopLevel.ts
index f170e37..c2e85d3 100644
--- a/base/typescript-zod/test/inputs/json/misc/ac944.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/ac944.json/default/TopLevel.ts
@@ -1,9 +1,10 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
-    "date": z.string(),
+    "date": dateSchema,
     "rates": z.record(z.string(), z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/b4865.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/b4865.json/default/TopLevel.ts
index 2f68a6c..56a6ccf 100644
--- a/base/typescript-zod/test/inputs/json/misc/b4865.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/b4865.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const FallSchema = z.enum([
     "Fell",
@@ -37,7 +39,7 @@ export const TopLevelElementSchema = z.object({
     "recclass": z.string(),
     "reclat": z.string().optional(),
     "reclong": z.string().optional(),
-    "year": z.string().pipe(z.coerce.date()).optional(),
+    "year": dateTimeSchema.optional(),
 });
 export type TopLevelElement = z.infer<typeof TopLevelElementSchema>;
 
diff --git a/base/typescript-zod/test/inputs/json/misc/b6f2c.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/b6f2c.json/default/TopLevel.ts
index 3c5684f..2d1d1b4 100644
--- a/base/typescript-zod/test/inputs/json/misc/b6f2c.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/b6f2c.json/default/TopLevel.ts
@@ -1,8 +1,9 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TotalPopulationSchema = z.object({
-    "date": z.string(),
+    "date": dateSchema,
     "population": z.number().int(),
 });
 export type TotalPopulation = z.infer<typeof TotalPopulationSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/bb1ec.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/bb1ec.json/default/TopLevel.ts
index 3c5684f..2d1d1b4 100644
--- a/base/typescript-zod/test/inputs/json/misc/bb1ec.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/bb1ec.json/default/TopLevel.ts
@@ -1,8 +1,9 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TotalPopulationSchema = z.object({
-    "date": z.string(),
+    "date": dateSchema,
     "population": z.number().int(),
 });
 export type TotalPopulation = z.infer<typeof TotalPopulationSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/cd463.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/cd463.json/default/TopLevel.ts
index f170e37..c2e85d3 100644
--- a/base/typescript-zod/test/inputs/json/misc/cd463.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/cd463.json/default/TopLevel.ts
@@ -1,9 +1,10 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
-    "date": z.string(),
+    "date": dateSchema,
     "rates": z.record(z.string(), z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/cf0d8.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/cf0d8.json/default/TopLevel.ts
index ddf9ef4..66b5c57 100644
--- a/base/typescript-zod/test/inputs/json/misc/cf0d8.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/cf0d8.json/default/TopLevel.ts
@@ -1,5 +1,6 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const AstronomySchema = z.object({
     "sunrise": z.string(),
@@ -106,7 +107,7 @@ export type Results = z.infer<typeof ResultsSchema>;
 
 export const QuerySchema = z.object({
     "count": z.number().int(),
-    "created": z.string().pipe(z.coerce.date()),
+    "created": dateTimeSchema,
     "lang": z.string(),
     "results": ResultsSchema,
 });
diff --git a/base/typescript-zod/test/inputs/json/misc/cfbce.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/cfbce.json/default/TopLevel.ts
index f170e37..c2e85d3 100644
--- a/base/typescript-zod/test/inputs/json/misc/cfbce.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/cfbce.json/default/TopLevel.ts
@@ -1,9 +1,10 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TopLevelSchema = z.object({
     "base": z.string(),
-    "date": z.string(),
+    "date": dateSchema,
     "rates": z.record(z.string(), z.number()),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/d0908.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/d0908.json/default/TopLevel.ts
index 3c5684f..2d1d1b4 100644
--- a/base/typescript-zod/test/inputs/json/misc/d0908.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/d0908.json/default/TopLevel.ts
@@ -1,8 +1,9 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
 
 export const TotalPopulationSchema = z.object({
-    "date": z.string(),
+    "date": dateSchema,
     "population": z.number().int(),
 });
 export type TotalPopulation = z.infer<typeof TotalPopulationSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/d23d5.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/d23d5.json/default/TopLevel.ts
index a17f508..15fdd1b 100644
--- a/base/typescript-zod/test/inputs/json/misc/d23d5.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/d23d5.json/default/TopLevel.ts
@@ -1,5 +1,6 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const FacetsSchema = z.object({
 });
@@ -7,10 +8,10 @@ export type Facets = z.infer<typeof FacetsSchema>;
 
 export const ResultSchema = z.object({
     "acronym": z.union([z.null(), z.string()]),
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "id": z.string(),
     "name": z.string(),
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "uri": z.string(),
 });
 export type Result = z.infer<typeof ResultSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/dbfb3.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/dbfb3.json/default/TopLevel.ts
index e031325..084f894 100644
--- a/base/typescript-zod/test/inputs/json/misc/dbfb3.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/dbfb3.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const TextSchema = z.enum([
     "Mostly Sunny",
@@ -112,7 +114,7 @@ export type Results = z.infer<typeof ResultsSchema>;
 
 export const QuerySchema = z.object({
     "count": z.number().int(),
-    "created": z.string().pipe(z.coerce.date()),
+    "created": dateTimeSchema,
     "lang": z.string(),
     "results": ResultsSchema,
 });
diff --git a/base/typescript-zod/test/inputs/json/misc/dc44f.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/dc44f.json/default/TopLevel.ts
index adcb59e..7eadd3d 100644
--- a/base/typescript-zod/test/inputs/json/misc/dc44f.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/dc44f.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
+
 
 export const BoosterSchema = z.enum([
     "rare",
@@ -110,7 +112,7 @@ export const LegalityElementSchema = z.object({
 export type LegalityElement = z.infer<typeof LegalityElementSchema>;
 
 export const RulingSchema = z.object({
-    "date": z.string(),
+    "date": dateSchema,
     "text": z.string(),
 });
 export type Ruling = z.infer<typeof RulingSchema>;
@@ -156,7 +158,7 @@ export const TopLevelSchema = z.object({
     "mkm_id": z.number().int(),
     "mkm_name": z.string(),
     "name": z.string(),
-    "releaseDate": z.string(),
+    "releaseDate": dateSchema,
     "type": z.string(),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts
index adcb59e..7eadd3d 100644
--- a/base/typescript-zod/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
+
 
 export const BoosterSchema = z.enum([
     "rare",
@@ -110,7 +112,7 @@ export const LegalityElementSchema = z.object({
 export type LegalityElement = z.infer<typeof LegalityElementSchema>;
 
 export const RulingSchema = z.object({
-    "date": z.string(),
+    "date": dateSchema,
     "text": z.string(),
 });
 export type Ruling = z.infer<typeof RulingSchema>;
@@ -156,7 +158,7 @@ export const TopLevelSchema = z.object({
     "mkm_id": z.number().int(),
     "mkm_name": z.string(),
     "name": z.string(),
-    "releaseDate": z.string(),
+    "releaseDate": dateSchema,
     "type": z.string(),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/misc/df957.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/df957.json/default/TopLevel.ts
index ddf9ef4..66b5c57 100644
--- a/base/typescript-zod/test/inputs/json/misc/df957.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/df957.json/default/TopLevel.ts
@@ -1,5 +1,6 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const AstronomySchema = z.object({
     "sunrise": z.string(),
@@ -106,7 +107,7 @@ export type Results = z.infer<typeof ResultsSchema>;
 
 export const QuerySchema = z.object({
     "count": z.number().int(),
-    "created": z.string().pipe(z.coerce.date()),
+    "created": dateTimeSchema,
     "lang": z.string(),
     "results": ResultsSchema,
 });
diff --git a/base/typescript-zod/test/inputs/json/misc/e2915.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/misc/e2915.json/default/TopLevel.ts
index 6e9d799..1d608c1 100644
--- a/base/typescript-zod/test/inputs/json/misc/e2915.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/misc/e2915.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const TextSchema = z.enum([
     "Sunny",
@@ -111,7 +113,7 @@ export type Results = z.infer<typeof ResultsSchema>;
 
 export const QuerySchema = z.object({
     "count": z.number().int(),
-    "created": z.string().pipe(z.coerce.date()),
+    "created": dateTimeSchema,
     "lang": z.string(),
     "results": ResultsSchema,
 });
diff --git a/base/typescript-zod/test/inputs/json/priority/bug2590.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/bug2590.json/default/TopLevel.ts
index ed8299a..02e5707 100644
--- a/base/typescript-zod/test/inputs/json/priority/bug2590.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/bug2590.json/default/TopLevel.ts
@@ -1,9 +1,11 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const InvoiceSchema = z.object({
-    "createdAt": z.union([z.null(), z.string().pipe(z.coerce.date())]),
-    "dueDate": z.union([z.null(), z.string()]),
+    "createdAt": z.union([z.null(), dateTimeSchema]),
+    "dueDate": z.union([z.null(), dateSchema]),
     "name": z.string(),
 });
 export type Invoice = z.infer<typeof InvoiceSchema>;
diff --git a/base/typescript-zod/test/inputs/json/priority/bug2663.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/bug2663.json/default/TopLevel.ts
index 68750b0..7b8611b 100644
--- a/base/typescript-zod/test/inputs/json/priority/bug2663.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/bug2663.json/default/TopLevel.ts
@@ -1,9 +1,11 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const TopLevelSchema = z.object({
-    "birthday": z.string(),
-    "lastSeen": z.string().pipe(z.coerce.date()),
+    "birthday": dateSchema,
+    "lastSeen": dateTimeSchema,
     "name": z.string(),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts
index 4b58238..071b690 100644
--- a/base/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const EnumValueSchema = z.enum([
     "ready",
@@ -358,7 +360,7 @@ export const DateParseHandlingSchema = z.object({
 export type DateParseHandling = z.infer<typeof DateParseHandlingSchema>;
 
 export const DateTimeSchema = z.object({
-    "DateTime": z.string().pipe(z.coerce.date()),
+    "DateTime": dateTimeSchema,
 });
 export type DateTime = z.infer<typeof DateTimeSchema>;
 
diff --git a/base/typescript-zod/test/inputs/json/samples/github-events.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/samples/github-events.json/default/TopLevel.ts
index d07ef7c..abbb3f0 100644
--- a/base/typescript-zod/test/inputs/json/samples/github-events.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/samples/github-events.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
+
 
 export const TypeSchema = z.enum([
     "User",
@@ -56,10 +58,10 @@ export type Label = z.infer<typeof LabelSchema>;
 export const MilestoneSchema = z.object({
     "closed_at": z.null(),
     "closed_issues": z.number().int(),
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "creator": UserSchema,
     "description": z.string(),
-    "due_on": z.union([z.null(), z.string().pipe(z.coerce.date())]),
+    "due_on": z.union([z.null(), dateTimeSchema]),
     "html_url": z.string(),
     "id": z.number().int(),
     "labels_url": z.string(),
@@ -67,7 +69,7 @@ export const MilestoneSchema = z.object({
     "open_issues": z.number().int(),
     "state": z.string(),
     "title": z.string(),
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "url": z.string(),
 });
 export type Milestone = z.infer<typeof MilestoneSchema>;
@@ -92,7 +94,7 @@ export const BaseRepoSchema = z.object({
     "compare_url": z.string(),
     "contents_url": z.string(),
     "contributors_url": z.string(),
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "default_branch": z.string(),
     "deployments_url": z.string(),
     "description": z.string(),
@@ -133,7 +135,7 @@ export const BaseRepoSchema = z.object({
     "owner": UserSchema,
     "private": z.boolean(),
     "pulls_url": z.string(),
-    "pushed_at": z.string().pipe(z.coerce.date()),
+    "pushed_at": dateTimeSchema,
     "releases_url": z.string(),
     "size": z.number().int(),
     "ssh_url": z.string(),
@@ -146,7 +148,7 @@ export const BaseRepoSchema = z.object({
     "tags_url": z.string(),
     "teams_url": z.string(),
     "trees_url": z.string(),
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "url": z.string(),
     "watchers": z.number().int(),
     "watchers_count": z.number().int(),
@@ -167,11 +169,11 @@ export type TopLevelRepo = z.infer<typeof TopLevelRepoSchema>;
 
 export const CommentSchema = z.object({
     "body": z.string(),
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "html_url": z.string(),
     "id": z.number().int(),
     "issue_url": z.string(),
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "url": z.string(),
     "user": UserSchema,
 });
@@ -190,10 +192,10 @@ export const IssueSchema = z.object({
     "assignee": z.null(),
     "assignees": z.array(z.any()),
     "body": z.string(),
-    "closed_at": z.union([z.null(), z.string().pipe(z.coerce.date())]),
+    "closed_at": z.union([z.null(), dateTimeSchema]),
     "comments": z.number().int(),
     "comments_url": z.string(),
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "events_url": z.string(),
     "html_url": z.string(),
     "id": z.number().int(),
@@ -206,7 +208,7 @@ export const IssueSchema = z.object({
     "repository_url": z.string(),
     "state": z.string(),
     "title": z.string(),
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "url": z.string(),
     "user": UserSchema,
 });
@@ -240,12 +242,12 @@ export const PayloadPullRequestSchema = z.object({
     "base": BaseSchema,
     "body": z.string(),
     "changed_files": z.number().int(),
-    "closed_at": z.string().pipe(z.coerce.date()),
+    "closed_at": dateTimeSchema,
     "comments": z.number().int(),
     "comments_url": z.string(),
     "commits": z.number().int(),
     "commits_url": z.string(),
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "deletions": z.number().int(),
     "diff_url": z.string(),
     "head": BaseSchema,
@@ -259,7 +261,7 @@ export const PayloadPullRequestSchema = z.object({
     "mergeable": z.null(),
     "mergeable_state": z.string(),
     "merged": z.boolean(),
-    "merged_at": z.string().pipe(z.coerce.date()),
+    "merged_at": dateTimeSchema,
     "merged_by": UserSchema,
     "milestone": z.null(),
     "number": z.number().int(),
@@ -272,7 +274,7 @@ export const PayloadPullRequestSchema = z.object({
     "state": z.string(),
     "statuses_url": z.string(),
     "title": z.string(),
-    "updated_at": z.string().pipe(z.coerce.date()),
+    "updated_at": dateTimeSchema,
     "url": z.string(),
     "user": UserSchema,
 });
@@ -300,7 +302,7 @@ export type Payload = z.infer<typeof PayloadSchema>;
 
 export const TopLevelElementSchema = z.object({
     "actor": ActorSchema,
-    "created_at": z.string().pipe(z.coerce.date()),
+    "created_at": dateTimeSchema,
     "id": z.string(),
     "org": ActorSchema.optional(),
     "payload": PayloadSchema,
diff --git a/base/typescript-zod/test/inputs/json/samples/null-safe.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/samples/null-safe.json/default/TopLevel.ts
index 1afce24..1515877 100644
--- a/base/typescript-zod/test/inputs/json/samples/null-safe.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/samples/null-safe.json/default/TopLevel.ts
@@ -1,5 +1,6 @@
 import * as z from "zod";
 
+const dateTimeSchema = z.string().refine(value => z.string().datetime({ offset: true }).safeParse(value.toUpperCase()).success && (new Date(value.slice(0, 10) + "T00:00:00Z").toJSON() || "").slice(0, 10) === value.slice(0, 10)).pipe(z.coerce.date());
 
 export const AddressSchema = z.object({
     "city": z.string(),
@@ -10,7 +11,7 @@ export type Address = z.infer<typeof AddressSchema>;
 
 export const ItemSchema = z.object({
     "address": AddressSchema.optional(),
-    "created_at": z.string().pipe(z.coerce.date()).optional(),
+    "created_at": dateTimeSchema.optional(),
     "name": z.string(),
     "sex": z.union([z.null(), z.number().int()]),
 });
diff --git a/base/typescript-zod/test/inputs/json/samples/us-senators.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/samples/us-senators.json/default/TopLevel.ts
index d0aa369..d1dd5a5 100644
--- a/base/typescript-zod/test/inputs/json/samples/us-senators.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/samples/us-senators.json/default/TopLevel.ts
@@ -1,5 +1,7 @@
 import * as z from "zod";
 
+const dateSchema = z.string().regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:[0-2]\d|3[01])$/).refine(value => (new Date(value + "T00:00:00Z").toJSON() || "").slice(0, 10) === value);
+
 
 export const PartySchema = z.enum([
     "Democrat",
@@ -96,7 +98,7 @@ export type Extra = z.infer<typeof ExtraSchema>;
 
 export const PersonSchema = z.object({
     "bioguideid": z.string(),
-    "birthday": z.string(),
+    "birthday": dateSchema,
     "cspanid": z.number().int(),
     "firstname": z.string(),
     "gender": GenderSchema,
@@ -121,7 +123,7 @@ export const ObjectElementSchema = z.object({
     "current": z.boolean(),
     "description": z.string(),
     "district": z.null(),
-    "enddate": z.string(),
+    "enddate": dateSchema,
     "extra": ExtraSchema,
     "leadership_title": z.union([z.null(), z.string()]),
     "party": PartySchema,
@@ -133,7 +135,7 @@ export const ObjectElementSchema = z.object({
     "senator_class_label": SenatorClassLabelSchema,
     "senator_rank": SenatorRankSchema,
     "senator_rank_label": SenatorRankLabelSchema,
-    "startdate": z.string(),
+    "startdate": dateSchema,
     "state": z.string(),
     "title": TitleSchema,
     "title_long": RoleTypeLabelSchema,
