【问题标题】:Override Date.prototype.toJSON for solving TimeZone problem in angular 7覆盖 Date.prototype.toJSON 以解决 Angular 7 中的 TimeZone 问题
【发布时间】:2019-07-30 14:08:34
【问题描述】:

我有一个 Angular 7 应用程序。我正在向我的服务器发送日期。但是由于时区,我的时间要提前 3 小时返回服务器。 我了解到解决这个问题的唯一方法是写作 Date.prototype.toJSON 。但是,我不知道角度,我应该在哪里写下面的代码以及如何写? (例如 index.html、app.module.ts、...)我在下面写了我的 stackblitz 示例。

Date.prototype.toJSON = function(key){
    //This code return me as string like "25.02.0219 19:48:52"
    return this.toLocaleDateString() + ' ' + this.toLocaleTimeString();
}

STACKBLITZ

【问题讨论】:

  • 为什么不直接发送 UTC 或 ISO 日期呢?它们包含时区,可用于大多数语言。
  • 请提供您发送的 UTC 和 ISO 日期。我不确定你是否理解它们是什么......
  • 所以是的,您没有发送 Iso 或 utc 日期,因此您发出。无论如何,尽管这是一个非常糟糕的做法,但您的问题似乎已经解决,所以再见!
  • 尝试使用new Date().toUTCString()new Date().toISOString(),这将返回包含时区的格式化日期,如果我没记错白天节省的话。
  • 你应该对你的代码进行分组。这意味着日期 utils 文件、服务、拦截器......而且你还必须在任何地方写 toJSON,只是字母会发生变化,使得这个论点无关紧要

标签: angular typescript angular7


【解决方案1】:

您可以在您的应用程序的主入口点覆盖 Date 原型,在您的情况下是 AppModule.ts,以便整个应用程序都可以使用它。

App.module.ts

export class AppModule {


  constructor() {
    this.overrideDate();
  }

  overrideDate() {
    Date.prototype.toJSON = function (key) {
      //This code return me as string like "25.02.0219 19:48:52"
      return this.toLocaleDateString() + ' ' + this.toLocaleTimeString();
    }

  }

现在您可以在您的组件中使用它。

  save() {

    console.log(this.myForm.value);
    this.http.post("localhost:5000",this.myForm.value).subscribe(result => {});
  }  

Here is forked stackblitz link

希望这会有所帮助!

【讨论】:

  • 非常感谢这一切都很好。最后我找到了解决方案。我认为,这是Timezone 问题的唯一解决方案。因为,我尝试了一周的所有方法@TheParam
  • 很高兴能帮上忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 2018-05-08
相关资源
最近更新 更多