Adds support for timezone selection on date fields.
### Summary
New `admin.timezones` config:
```ts
{
// ...
admin: {
// ...
timezones: {
supportedTimezones: ({ defaultTimezones }) => [
...defaultTimezones,
{ label: '(GMT-6) Monterrey, Nuevo Leon', value: 'America/Monterrey' },
],
defaultTimezone: 'America/Monterrey',
},
}
}
```
New `timezone` property on date fields:
```ts
{
type: 'date',
name: 'date',
timezone: true,
}
```
### Configuration
All date fields now accept `timezone: true` to enable this feature,
which will inject a new field into the configuration using the date
field's name to construct the name for the timezone column. So
`publishingDate` will have `publishingDate_tz` as an accompanying
column. This new field is inserted during config sanitisation.
Dates continue to be stored in UTC, this will help maintain dates
without needing a migration and it makes it easier for data to be
manipulated as needed. Mongodb also has a restriction around storing
dates only as UTC.
All timezones are stored by their IANA names so it's compatible with
browser APIs. There is a newly generated type for `SupportedTimezones`
which is reused across fields.
We handle timezone calculations via a new package `@date-fns/tz` which
we will be using in the future for handling timezone aware scheduled
publishing/unpublishing and more.
### UI
Dark mode

Light mode

91 lines
3.3 KiB
JSON
91 lines
3.3 KiB
JSON
{
|
|
"name": "payload-test-suite",
|
|
"version": "0.0.1",
|
|
"private": true,
|
|
"description": "Payload test suite",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "cross-env NODE_OPTIONS=--no-deprecation node ./dev.js",
|
|
"test": "pnpm -C \"../\" run test",
|
|
"test:e2e": "pnpm -C \"../\" run test:e2e",
|
|
"test:int": "pnpm -C \"../\" run test:int",
|
|
"typecheck": "pnpm turbo build --filter payload-test-suite && tsc --project tsconfig.typecheck.json"
|
|
},
|
|
"lint-staged": {
|
|
"**/package.json": "sort-package-json",
|
|
"*.{md,mdx,yml,json}": "prettier --write",
|
|
"*.{js,jsx,ts,tsx}": [
|
|
"prettier --write",
|
|
"eslint --cache --fix"
|
|
],
|
|
"templates/website/**/*": "sh -c \"cd templates/website; pnpm install --ignore-workspace --frozen-lockfile; pnpm run lint --fix\"",
|
|
"tsconfig.json": "node scripts/reset-tsconfig.js"
|
|
},
|
|
"devDependencies": {
|
|
"@aws-sdk/client-s3": "^3.614.0",
|
|
"@date-fns/tz": "1.2.0",
|
|
"@next/env": "15.1.5",
|
|
"@payloadcms/db-mongodb": "workspace:*",
|
|
"@payloadcms/db-postgres": "workspace:*",
|
|
"@payloadcms/db-sqlite": "workspace:*",
|
|
"@payloadcms/db-vercel-postgres": "workspace:*",
|
|
"@payloadcms/drizzle": "workspace:*",
|
|
"@payloadcms/email-nodemailer": "workspace:*",
|
|
"@payloadcms/email-resend": "workspace:*",
|
|
"@payloadcms/eslint-config": "workspace:*",
|
|
"@payloadcms/eslint-plugin": "workspace:*",
|
|
"@payloadcms/graphql": "workspace:*",
|
|
"@payloadcms/live-preview": "workspace:*",
|
|
"@payloadcms/live-preview-react": "workspace:*",
|
|
"@payloadcms/next": "workspace:*",
|
|
"@payloadcms/payload-cloud": "workspace:*",
|
|
"@payloadcms/plugin-cloud-storage": "workspace:*",
|
|
"@payloadcms/plugin-form-builder": "workspace:*",
|
|
"@payloadcms/plugin-multi-tenant": "workspace:*",
|
|
"@payloadcms/plugin-nested-docs": "workspace:*",
|
|
"@payloadcms/plugin-redirects": "workspace:*",
|
|
"@payloadcms/plugin-search": "workspace:*",
|
|
"@payloadcms/plugin-sentry": "workspace:*",
|
|
"@payloadcms/plugin-seo": "workspace:*",
|
|
"@payloadcms/plugin-stripe": "workspace:*",
|
|
"@payloadcms/richtext-lexical": "workspace:*",
|
|
"@payloadcms/richtext-slate": "workspace:*",
|
|
"@payloadcms/storage-azure": "workspace:*",
|
|
"@payloadcms/storage-gcs": "workspace:*",
|
|
"@payloadcms/storage-s3": "workspace:*",
|
|
"@payloadcms/storage-uploadthing": "workspace:*",
|
|
"@payloadcms/storage-vercel-blob": "workspace:*",
|
|
"@payloadcms/translations": "workspace:*",
|
|
"@payloadcms/ui": "workspace:*",
|
|
"@sentry/nextjs": "^8.33.1",
|
|
"@sentry/react": "^7.77.0",
|
|
"@types/jest": "29.5.12",
|
|
"@types/react": "19.0.1",
|
|
"@types/react-dom": "19.0.1",
|
|
"babel-plugin-react-compiler": "19.0.0-beta-714736e-20250131",
|
|
"comment-json": "^4.2.3",
|
|
"create-payload-app": "workspace:*",
|
|
"dotenv": "16.4.7",
|
|
"drizzle-kit": "0.28.0",
|
|
"eslint-plugin-playwright": "2.2.0",
|
|
"execa": "5.1.1",
|
|
"file-type": "19.3.0",
|
|
"http-status": "2.1.0",
|
|
"jest": "29.7.0",
|
|
"jwt-decode": "4.0.0",
|
|
"mongoose": "8.9.5",
|
|
"next": "15.1.5",
|
|
"nodemailer": "6.9.16",
|
|
"payload": "workspace:*",
|
|
"qs-esm": "7.0.2",
|
|
"react": "19.0.0",
|
|
"react-dom": "19.0.0",
|
|
"server-only": "^0.0.1",
|
|
"slate": "0.91.4",
|
|
"tempy": "^1.0.1",
|
|
"ts-essentials": "10.0.3",
|
|
"typescript": "5.7.3",
|
|
"uuid": "10.0.0"
|
|
}
|
|
}
|