Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在typescript中创建UTC日期_Typescript_Date_Datetime_Utc_Date Formatting - Fatal编程技术网

在typescript中创建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

我目前正试图强制我的应用程序使用UTC时间,无论系统时间是什么。我有一个创建日期的方法:

  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()
在其上-在创建字符串时将时间戳转换为本地时区。对象本身没有本地时间或时区。