【问题标题】:Locale DateTime in ABPABP 中的区域设置日期时间
【发布时间】:2018-02-22 08:13:07
【问题描述】:

我在弹出模式中有一个 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 时间保存在数据库中。 我的问题是关于何时将数据从服务器读回现场。我假设 moment.js 会将其重新转换回本地时区,就像它在设置其值时所做的那样,但事实并非如此!

任何意见都非常感谢:)

【问题讨论】:

  • 如果你不想接受别人的答案或者你已经有了答案,为什么还要问问题?
  • @vivek-nuna 好吧,情况并非总是如此!我为这个问题提出的答案实际上不是答案!我这样放在那里,因为我的问题的更多细节不知道我可以编辑我的原始问题并添加更多内容! :) 您的回答部分解决了我的问题,但我仍在处理 UTC 时间从服务器发送回客户端。我也在这方面提出了一个问题here

标签: angular momentjs datetimepicker aspnetboilerplate


【解决方案1】:

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

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

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

这是场景:

  1. 假设这是保存在 DB 中的 UTC 时间: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)!

【讨论】:

  • 你解决了这个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-12
相关资源
最近更新 更多