根据时区更改mat-datepicker选择的日期值

Change mat-datepicker selected date value according to a time zone

在 ts。我使用 (dateChange)="setToDate($event.value)" 来获取选定的日期。

<mat-form-field appearance="outline">
        <input matInput [matDatepicker]="picker2" readonly = "readonly"  [(ngModel)] = "grid.todate" 
            (dateChange)="setToDate($event.value)" [min]="grid.fromdate">
        <mat-datepicker-toggle matSuffix [for]="picker2"></mat-datepicker-toggle>
        <mat-datepicker #picker2></mat-datepicker>
    </mat-form-field>

我想将所选日期更改为服务器时区 为 GMT。

我试过 DatePip。

public setToDate(data: any): void {
    const todayDate  = new Date();
    this.todate = data._d;
    const changedDate = new DatePipe('en-Us').transform(data.toDate(), 'full', 'GMT');
}

日期选择器选择了凌晨 00:00 的日期。 Date pip 不会给出 GMT 时间。

这是一个例子 > https://stackblitz.com/edit/material-date-picker-csyldt?embed=1&file=app/app.component.ts

像下面这样更改您的 setDate 方法,

setDate(date: string) {
  this.date = date;
  this.gmtDate = new Date(date).toUTCString();
}

您可以使用 moment 将您的时间转换为 UTC。 UTC 和 GMT 没有偏移量。 对于日期,您只需在函数中传递今天的日期。 var utcDate = new moment("2020-01-24T11:00", "YYYY-MM-DDTHH:mm").utc();

我找到了将选择的日期转换为任何时区日期(使用它选择的时间)的解决方案

setDate(newdate: string) {
    const _ = moment();
    const date = moment(newdate).add({hours: _.hour(), minutes:_.minute() , seconds:_.second()});
    this.date = date.toDate();
    this.gmtDate = new DatePipe('en-Us').transform(date, 'full', '+530');
  }
}

https://stackblitz.com/edit/material-date-picker-csyldt?embed=1&file=app/app.component.ts

我已经为遇到同样问题的人编辑了 stackblitz。