【问题标题】:Mat-Datepicker displayed date always local, never in UTCMat-Datepicker 始终显示本地日期,从不使用 UTC
【发布时间】:2019-09-09 18:22:30
【问题描述】:

我正在使用 datepickermomentjs 将 UTC 日期发送到我的服务器,它可以 100% 工作。但是,当我将这些 UTC 日期读回日期选择器时,它总是会观察我的时区(我是 EST,因为它的价值)对于用户来说是选择的错误日期。

示例:

我选择 '09/10/2019',这将作为 1567987200 或 '09/10/2019 00:00:00.000'。

读出时,它会显示“09/09/2019”(尽管该值在模型中从未改变,仍然表示为 1567987200)。

我不仅需要能够将值选择为 UTC,而且还需要在日期选择器中以 UTC 显示。这可能吗?

DateView.ts

...
<div>
    <mat-form-field>
        <input #date="ngModel"
               matInput
               [matDatepicker]="datePicker"
               placeholder="Date"
               [(ngModel)]="model.date"
               ngClass="date-input"
               required>
        <mat-datepicker-toggle matSuffix [for]="datePicker"></mat-datepicker-toggle>
        <mat-datepicker touchUi #datePicker></mat-datepicker>
    </mat-form-field>
</div>
...

DateModule.ts

...
providers: [
    { provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } }
],
...

【问题讨论】:

    标签: angular datepicker momentjs


    【解决方案1】:

    如果要显示UTC时间,可以像这样设置UTC偏移量为0

    moment(1567987200).utcOffset(0).format('YYYY-MM-DD')
    

    【讨论】:

      【解决方案2】:

      我能够通过内置的矩函数解决这个问题。

      moment.unix(date).utc();
      

      来自文档:

      尽管 Unix 时间戳是基于 UTC 的,moment.unix() 函数会创建一个 本地模式下的时刻对象。如果您需要 UTC,则随后调用 .utc(),如:var day = moment.unix(1318781876).utc();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-16
        • 1970-01-01
        • 2012-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多