【问题标题】:How to display dates only in angular material date-picker?如何仅在角度材料日期选择器中显示日期?
【发布时间】:2018-06-11 04:31:54
【问题描述】:

这里的问题是我只想显示一个日期,比如出生日期,其中时区并不重要。我的 API 以iso_8601 格式序列化日期。日期选择器会一直显示前一天的日期,因为它缺少时区。这里有什么工作, 有没有办法强制日期选择器忽略时区,或者我必须更改我的 API 日期输出?即

API 输出,

{
    "aliasName": null,
    "patientDob": "1985-04-24",
    "contactAddress": null,
    "streetNo": null,
}

日期选择器显示为 4/23/1985, // 我使用DateAdapter 根据区域设置显示日期。

如果我再次重新选择日期,我的日期选择器选择的日期值看起来像 1985-04-24T08:00:00.000Z

例如here

【问题讨论】:

  • 在您的示例中,我看不出它显示正确格式的任何问题。
  • 您可以使用服务器的时区,这样您的每个日期都是相同的,将来您永远不会遇到任何问题。
  • @AnshumanJaiswal,这不是格式,而是值。在我的示例中,我有this.date.setValue('1985-04-24');,显示的日期是 1985 年 4 月 23 日。我正在使用 NodaTime 并且我在我的 API 中使用 LocalDate 作为日期类型
  • 您不认为只应跳过日期的时区计算吗?
  • 是的,DOB 等少数字段可以跳过。

标签: angular angular-material


【解决方案1】:

我目前的解决方法如下,

客户端(API 仅序列化 ISO 日期,即“1985-04-24”) 这个函数是我写的,

function formatApiLocalDate(date: Date): Date {
  if (date) {
    return new Date(moment(date.toString()).format());
  }
  return null;
}

服务器端(API 序列化 DateTimeOffset 即“1985-04-04T23:59:59-08:00”)在我的情况下,我使用的是NodaTime,所以它的OffsetDateTime, 我写了这个扩展方法,

public static OffsetDateTime ToOffsetDateTimeUTC (this LocalDate localDate, string tzId) {
    LocalTime time = new LocalTime (23, 59, 59);
    LocalDateTime localDateTime = (localDate + time);
    DateTimeZone dtz = DateTimeZoneProviders.Tzdb[tzId];
    Offset offset = dtz.GetUtcOffset (Instant.FromUtc (localDateTime.Year, localDateTime.Month, localDateTime.Day, time.Hour, time.Minute));
    return new OffsetDateTime (localDateTime, offset);
}

【讨论】:

    猜你喜欢
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 2019-03-04
    相关资源
    最近更新 更多