【问题标题】:Angular Material Datepicker shows one day behind in Angular 9 when I click search button当我单击搜索按钮时,Angular Material Datepicker 在 Angular 9 中显示落后一天
【发布时间】:2021-02-08 13:10:30
【问题描述】:

html:

            <mat-form-field>
                <input matInput [matDatepicker]="picker1" placeholder="From date: mm/dd/yyyy" name="from_date"
                       [(ngModel)]="callListRequestOb.from_date" maxlength="150">
                <mat-datepicker-toggle matSuffix [for]="picker1"></mat-datepicker-toggle>
                <mat-datepicker #picker1></mat-datepicker>
            </mat-form-field>

在方法中:

        this.callListRequestOb.from_date = new Date(this.callListRequestOb.from_date).toISOString().slice(0, 10);

当我在 datepicker 中选择一个日期时,它会很好地选择日期。但是当我点击搜索按钮(我不包括它)时,选择时间显示一个落后的日期。我正在使用 Angular 9。如何解决这个问题?

【问题讨论】:

  • 当您使用 .toLocaleDateString() 而不是 ISO 时会发生什么?
  • 其实我需要'2021-02-05T14:48:00.000Z'这个类型的数据来发送API的头部。这就是我使用 toISOString() 的原因。 @MikeOne
  • 我们只是在这里讨论演示,对吗?提交时将其转换为其他内容是一个不同的问题,对吗?

标签: angular datepicker angular-material


【解决方案1】:

您从日期选择器中选择的日期是当地时间。 从 toISOString() 的文档中可以清楚地看出这是 UTC 时间。

“时区始终为零 UTC 偏移量,由后缀“Z”表示。” https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString

如果当地时间最初是在一天开始的晚上 00:00:00,那么这种差异可能会导致完全不同的一天。 通过减去时区偏移量,您可以解决这个问题。

const d = new Date(this.callListRequestOb.from_date)
// This will return an ISO string matching your local time.
new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes() - d.getTimezoneOffset()).toISOString();

【讨论】:

  • 当时解决了,但新的问题来了。通过选择日期,我得到了数据。每当我选择分页 2-3 次时,日期就会发生变化。因为,它首先选择了GMT +6。但是当我调用该方法 3-4 次时,GMT +6 会更改 +12、+18 等等。这就是 datepicker 日期更改的原因。有什么解决办法吗? @埃里克
  • d=> 2021 年 1 月 28 日星期四 00:00:00 GMT+0600(孟加拉国标准时间)//第一次通话 d=> 2021 年 1 月 28 日星期四 06:00:00 GMT+0600(孟加拉国标准时间)时间)//第二次调用......等等。几次后,日期选择器日期发生变化。 @埃里克
  • 是否可以重构代码,使您只在选择后减去 timezoneoffset 一次,然后重复使用该日期而不再次更改它?或者,如果这不可能,请尝试对每个调用使用原始输入日期,而不是减去 timezoneoffset 的更改日期。
  • Erik 你是救生员,代码运行良好,谢谢
猜你喜欢
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 2019-12-14
  • 1970-01-01
相关资源
最近更新 更多