Managing DateTime Fields

1. Defining DateTime Fields

MappingDetail
Defaulttimestamp(3) PG, datetime(3) MySQL
UTCPrisma stores in UTC
TimezoneUse @db.Timestamptz on PG

2. Setting Default Timestamps

createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
FunctionEffect
now()Set to current time at insert
dbgenerated("CURRENT_TIMESTAMP")Use DB function explicitly

3. Using Auto-Update Timestamps

NoteDetail
@updatedAtClient sets new Date on every update
BypassUse raw SQL to skip

4. Filtering by Date Range

const start = new Date("2026-01-01");
const end   = new Date("2026-12-31T23:59:59.999Z");
await prisma.order.findMany({
  where: { createdAt: { gte: start, lte: end } }
});
OperatorMeaning
gt / gteGreater than (or equal)
lt / lteLess than (or equal)
equalsExact match

5. Formatting Date Values

LibraryUse
Intl.DateTimeFormatLocale-aware formatting
date-fns / dayjsFormatting + tz
Temporal APIModern proposal, polyfill available

6. Using Database Date Functions

const rows = await prisma.$queryRaw`
  SELECT DATE_TRUNC('month', "createdAt") AS month, COUNT(*) AS cnt
  FROM "Order" GROUP BY 1 ORDER BY 1`;
FunctionDB
DATE_TRUNCPG
DATE_FORMATMySQL
EXTRACTPG/MySQL standard

7. Handling Timezone Conversions

TipDetail
Store UTCAlways store timestamps in UTC
Convert at edgesApply user tz only when displaying
PG AT TIME ZONEConvert in raw SQL when needed

8. Comparing Date Fields

await prisma.task.findMany({
  where: { dueDate: { lt: new Date() } }  // overdue
});
PatternDetail
OverduedueDate < now
UpcomingdueDate >= now
Between two fieldsUse raw SQL (Prisma can't compare two columns yet)

9. Extracting Date Parts

NeedApproach
Year/Month/DayRaw SQL EXTRACT(YEAR FROM "createdAt")
Day of weekEXTRACT(DOW FROM ...)
App sideJS getUTCMonth() etc.

10. Working with Relative Dates

const days = 7;
const since = new Date(Date.now() - days * 86400_000);
await prisma.activity.findMany({ where: { createdAt: { gte: since } } });
CommonFormula
Last 24hDate.now() - 86_400_000
Last 30dDate.now() - 30 * 86_400_000
Start of day (UTC)new Date(d.toISOString().slice(0,10))