Javascript wrong/different日期时间是从UTC转换后的日期中提取出来的

Javascript wrong/different date time is extracted from the UTC converted date

我有一个本地格式的日期,我将其更改为 UTC 格式。在 UTC 之后,我想在 UTC 中提取日期和时间。但是每当我尝试为此提取时间或日期时,它只考虑当地时间,这是为什么?

          this.utcDate = this.datePipe.transform(this.onceDate,'medium');
          console.log('+=timezonenene=+', this.utcDate);

          this.utcDateStr = new Date(this.utcDate).toUTCString();
          console.log('++ date is ++', this.utcDateStr);

          this.utcDateStr = new Date(this.utcDateStr).toISOString();
          console.log('++ date is ++', this.utcDateStr);

          this.showDate = this.datePipe.transform(this.utcDateStr, 'yyyy-MM-dd');
          this.showTime = this.datePipe.transform(this.utcDateStr, 'HH:mm');
          console.log('+=time date zonenene date str =+', this.showDate);
          console.log('+=timezonenene date str=+', this.showTime);

输出:

+=timezonenene=+ Apr 7, 2020, 5:41:16 PM
++ date is ++ Tue, 07 Apr 2020 12:11:16 GMT
++ date is ++ 2020-04-07T12:11:16.000Z
+=time date zonenene date str =+ 2020-04-07
+=timezonenene date str=+ 17:41

我希望上次记录的时间为:12:11 而不是 17:41

您的问题似乎与 Angular DatePipe 有关(尽管您是直接调用 transform 函数)。

来自关于 timezone 参数的文档:

When not supplied, uses the end-user's local system timezone.

因此,要获得 UTC 输出,您可以更改代码以在每次调用 datePipe.transform.

时在格式参数后提供时区参数 'UTC'

此外,我会重新考虑您为什么要生成字符串只是为了再次解析它们。通常这是不必要的,并且会导致错误。如果 this.onceDate 是一个 Date 对象,您应该能够在整个代码中使用它,而不是创建 this.utcDateStr 只是为了再次解析和转换它。 (尽管很难从您的代码中判断是否是这种情况。以后请提供 minimal, reproducible example。)