棱镜日期减一

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 加一天,减一天,加减一小时一分钟,加减一年

js中两个日期大小比较,获取当前日期,日期加减一天

java的前台传来一个Date日期的值,我想做的是:让这个日期减一天,比如页面上传来的是2013-1-1,那么减一天为

如何项sql数据库中添加一年的日期

java输入日期输出后一天

用java实现日期类的加减