ABP中的区域设置日期时间

时间:2018-02-22 08:13:08

标签: angular momentjs datetimepicker aspnetboilerplate

我在弹出模式中有一个DateTime字段,如下所示,它只能显示时间部分:

HTML:

<div class='input-group date'>
   <input class="form-control" type="datetime" #RequiredByDate name="RequiredByDate" [value]="formatDate(hitchRequest.requiredByDate, 'LT')" required>
   <span class="input-group-addon">
      <span class="fa fa-clock-o"></span>
   </span>
</div>

TS:

formatDate(date: any, format: string): string {
    if (!date) {
        return '';
    }

    return moment(date).format(format);
}

onShown(): void {
    $(this.requiredByDate.nativeElement).datetimepicker({
        locale: abp.localization.currentLanguage.name,
        format: 'LT',
    });
}

当我设置DateTime并点击保存按钮时,momentjs真正将其转换为UTC时间并将其发送到服务器,最终以UTC时间保存在DB中。 我的问题是关于何时从服务器向现场读取数据。我假设moment.js会将它重新转换回本地时区,就像它设置其值时所做的那样,似乎并非如此!

非常感谢任何输入:)

1 个答案:

答案 0 :(得分:0)

我最终将formatDate方法更改为以下内容:

formatDate(date: any, format: string): string {
    return moment.utc(date.toString()).local().format(format);
}

它显示从DB获取值的本地时间,但现在问题是更新其值时。当我保存表单时,它会将日期视为当地时间,每次从中扣除10:30,然后发送到服务器!

以下是该方案:

  1. 假设此时间保存在DB:2018-02-23 00:00:00
  2. 在填充字段时,它会将10:30(我的当地时区)添加到该字段并在字段中显示:2018-02-23 10:30:00
  3. 我保存表单而不更改上述值
  4. 此刻再次从服务器返回的值(2018-02-23 00:00:00)扣除10:30小时,并将其发送到服务器进行保存。
  5. 然后我在该字段中有一个新值而不在表单中更改它(2018-02- 22 13:30:00)!