ngx-bootstrap timepicker 时区偏移导致 SQL 保存错误时间

C A*_*son 5 ngx-bootstrap angular

将 timepicker 模块与所有默认选项一起使用,但 minutestep 设置为 1。

代码行如下

let DailyStartTime =  this.dailyStartTime != null ? 
                         new Date(this.dailyStartTime.getFullYear(),
                               this.dailyStartTime.getMonth(),
                               this.dailyStartTime.getDate(),
                               this.dailyStartTime.getHours(),
                               this.dailyStartTime.getMinutes()) : null
Run Code Online (Sandbox Code Playgroud)

将数据记录为 2017 年 5 月 31 日星期三 19:51:00 GMT-0400(东部夏令时间)

它最初显示,但一旦保存回 SQL,它就会转换为“2017-05-31T23:51:00”,它按时间偏移量推进。我怎么能否定这个?

Mar*_*ius 4

当尝试使用 ngx-bootstrap (3.0) timepicker 将反应式表单保存到 POST(带有 EntityFramework 的 C# WebApi)时,我遇到了同样的问题

似乎是 UTC 和本地计算机的问题。来自 datepicker 的日期似乎很好,但是在创建 POST 对象时,javascript 似乎会调整 UTC 和本地计算机之间的时区差异。

解决方法(.ts):

submit() {
  this.dataService.saveOpenHours({ OpensAt: this.fixDate(this.form.value.openHour), ClosesAt: this.fixDate(this.form.value.closeHour) }).subscribe(data => {
    // do something
  });
}

fixDate(d: Date): Date {
  d.setHours(d.getHours() - d.getTimezoneOffset() / 60);
  return d;
}
Run Code Online (Sandbox Code Playgroud)

超文本标记语言

<form id="ngForm" [formGroup]="form" (ngSubmit)="submit()">
  <timepicker formControlName="openHour"></timepicker>
  <timepicker formControlName="closeHour"></timepicker>
</form>
Run Code Online (Sandbox Code Playgroud)

希望这会对某人有所帮助!