Description
Feature Description
I spent a while over the weekend trying to find out why my dates were being converted from UTC strings using the column transformer in my queries before I realized the SQLIte Abstract Driver I was using was doing something funky behind the scenes because my column type was 'date'.
The function that converts the date to write to the database converts it to a local-time string:
It would be great to add utc: boolean option to date fields and if set to true, use UTC string instead of the local time string so the database can save values in a consistent timezone.
The Solution
Modify the date type column to allow a property utc: boolean.
If set to true, ensure this function DateUtils.mixedDateToDateString handles UTC conversion instead of just local time.
Considered Alternatives
In the meantime you can set your column type to 'text' and write a custom transformer like below:
@Column({
type: 'text',
default: () => "(date('now', 'utc'))",
transformer: {
to: (value: Date) => {
return value ? value.toISOString().slice(0, 10) : undefined
},
from: (value: string | Date) => {
if (value instanceof Date) {
return new Date(Date.UTC(value.getUTCFullYear(), value.getUTCMonth(), value.getUTCDate()))
}
const [year, month, day] = value.split('-').map(Number)
return new Date(Date.UTC(year, month - 1, day))
},
},
})
date!: Date
Additional Context
No response
Relevant Database Driver(s)
- aurora-mysql
- aurora-postgres
- better-sqlite3
- cockroachdb
- cordova
- expo
- mongodb
- mysql
- nativescript
- oracle
- postgres
- react-native
- sap
- spanner
- sqlite
- sqlite-abstract
- sqljs
- sqlserver
Are you willing to resolve this issue by submitting a Pull Request?
No, I don’t have the time and I’m okay to wait for the community / maintainers to resolve this issue.