在typescript中创建UTC日期
我目前正试图强制我的应用程序使用UTC时间,无论系统时间是什么。我有一个创建日期的方法:在typescript中创建UTC日期,typescript,date,datetime,utc,date-formatting,Typescript,Date,Datetime,Utc,Date Formatting,我目前正试图强制我的应用程序使用UTC时间,无论系统时间是什么。我有一个创建日期的方法: public static createDate(date: Date = new Date()): Date { return new Date( Date.UTC( date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDay(), date.getUTCHour
public static createDate(date: Date = new Date()): Date {
return new Date(
Date.UTC(
date.getUTCFullYear(),
date.getUTCMonth(),
date.getUTCDay(),
date.getUTCHours(),
date.getUTCMinutes(),
date.getUTCSeconds(),
date.getUTCMilliseconds()
)
);
}
然而,当它进入数据库时,我得到了一个比它早8小时的时间。我不知道这里发生了什么事
我曾尝试使用其他解决堆栈溢出问题的方法,使用诸如矩和日期fns之类的库,但我没有任何运气。日期对象已经在UTC中。它总是这样,因为它内部存储的唯一值是基于UTC的数字时间戳,表示自1970-01-01 00:00:00.000 UTC以来的毫秒数。您可以直接使用
.getTime()
或.valueOf()
或任何将日期
对象强制为数字的机制来查看时间戳。您还可以使用.toISOString()
看到它的字符串表示形式
您在问题中演示的方法只是复制Date
对象的一种漫长而缓慢的方式。使用newdate(Date)
会得到相同的结果
您说您在数据库中的时间偏移方面遇到了问题,但您没有显示代码的这一部分,也没有描述有关数据库的任何内容,因此我无法直接回答。很可能您在将日期
对象传递到转换为本地时间的数据库时遇到了一个微妙的错误。我意识到,由于我在我的计算机上手动设置了时间,它使用了不同的时区,因此返回了不同的时间。现在似乎很好。您使用的是哪个数据库?您使用的数据库是否有默认时区?您能否分享您试图保存到数据库中的内容、从数据库返回的内容、如何使用该日期值以及为什么您认为它提前了8小时?我目前正在使用MySql和Prisma ORM。Prisma在存储datetime时询问日期,您好。很明显,你掉进了我们称之为一个陷阱。当您使用Prisma(您的实际问题“X”)保存到数据库时,您没有询问为什么会发生时区转换,而是错误地认为问题是关于日期
对象(您的解决方案“Y”),现在您问的是Y的问题。请阅读更多关于。然后我建议打开一个关于DB部分的新问题。我正在使用mysql和Prisma ORMI,我注意到即使执行“return new Date”,它仍然会返回一个8小时前的日期,您可能会看到该Date
对象的字符串表示,就好像调用了.toString()
在其上-在创建字符串时将时间戳转换为本地时区。对象本身没有本地时间或时区。