棱镜日期减一
Posted
技术标签:
【中文标题】棱镜日期减一【英文标题】:Prisma date off by one 【发布时间】:2021-08-22 14:53:57 【问题描述】:使用 prisma 2.24.1 和 mysql 8.0.25。每当我插入一个日期值时,它都会存储在数据库中,并放一天假,例如:
插入 2006 年 5 月 30 日星期二 00:00:00 GMT+0200(中欧夏令时间) 数据库:2006-05-29
我正在使用 MySQL 的 DATE 数据类型。我也尝试了 DATETIME 无济于事。
我的设置是:
myTable (
id int primary key autoincrement,
...
birthdate date,
...
)
schema.prisma 根据 prisma db pull
model myTable
id Int @id @default(autoincrement()) @db.UnsignedInt
...
birthdate DateTime? @db.Date
...
插入
await prisma.$transaction(
myTable.map((obj) =>
const dataObject =
...
birthdate: Date object, containing the date,
...
;
return prisma.myTable.create(
data: dataObject,
);
)
);
欢迎任何提示
【问题讨论】:
您的时区似乎有问题? "Prisma 自动将您发送的时间戳转换为 UTC",请参阅:***.com/questions/64535044/… 在我看来,时区问题会导致时间减少一个或多个小时。在我的情况下,date 是一天 day 所以除非我在两天之间过渡,否则日期应该没问题。 如果您的本地时间在时区-02:00
中,如果当前时间是2021-06-05 00:10:00
会发生什么?...确实,在UTC 上运行的服务器会说日期仍然是2021-06-04
有趣的是:我创建const now = new Date(1960, 8 ,24)
来生成日期 24.9.1960。将其保存在 date
属性中时,它给了我 23.9.1960,当我将它保存在 datetime
属性中时,它给了我 24.9.1960。我希望 date
与时区无关。
【参考方案1】:
我可能会迟到,但几天前我遇到了类似的问题。这是我解决它的方法。
function storeCorrectDate(date)
return new Date(
Date.parse(date.toUTCString()) - date.getTimezoneOffset() * 60000
);
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于棱镜日期减一的主要内容,如果未能解决你的问题,请参考以下文章
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年