【问题标题】:Get the date and time without a time zone using a date time picker使用日期时间选择器获取没有时区的日期和时间
【发布时间】:2020-11-11 10:23:37
【问题描述】:

我有一个像这样的带有日期时间选择器的表单:

  <mat-form-field>
    <mat-placeholder>Time Window Start</mat-placeholder>
    <mat-datetimepicker-toggle [for]="datetimePickerStart" matSuffix></mat-datetimepicker-toggle>
    <mat-datetimepicker
      #datetimePickerStart
      type="datetime"
      openOnFocus="true"
      timeInterval="5">
    </mat-datetimepicker>
    <input
      matInput
      formControlName="datestart"
      [matDatetimepicker]="datetimePickerStart"
      required
      autocomplete="false">
  </mat-form-field>

我想要的是获取 UTC 时间,所以我还在我的app.module.ts 中添加了这个:

{
    provide: MAT_MOMENT_DATETIME_FORMATS,
    useValue: {useUtc: true}
},
{
    provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS,
    useValue: {useUtc: true}
}

然后我得到这样的值:

var datestart: Moment = this.form.get('datestart').value;

但是当我输入一个日期时,假设 11 月 11 日下午 12:00,我得到的日期是 11 月 11 日晚上 10:00(输入中的值是 11/11/2020 10:00 PM,返回的值是 @987654327 @ 是 2020-11-11T10:00:00.000Z)。我需要的是日期选择器返回给我2020-11-11T12:00:00.000Z。我怎么得到它?

【问题讨论】:

标签: angular typescript momentjs


【解决方案1】:

我认为,当您使用 {useUtc: true} 时,它会占用您当前时间并将其转换为 UTC,从而使 12PM 变为 10PM。
尽量不要使用{useUtc: true}

【讨论】:

    【解决方案2】:

    按照 Tom 的建议,解决方案是使用 Moment-Timezone:

    import * as moment from 'moment';
    import 'moment-timezone';
    
    var datestart = moment.tz(this.form.get('datestart').value, moment.tz.guess());
    console.log(datestart.format("YYYY-MM-DDTH:mm:ss.SSS") + 'Z');
    

    这里,moment.tz.guess() 返回时区 ("Europe/Berlin"),moment.tz() 在检测到的时区中创建日期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      相关资源
      最近更新 更多