我是高朗的初学者. 我正在try 从HTML输入类型Date中获取输入

<input type="date" id="birthDate" name="BirthDate" required placeholder="YYYY-MM-DD">

并发布此Create方法

func (c *customerController) CreateCustomer(ctx *gin.Context) {
    var customer Customer
    if err := ctx.ShouldBindJSON(&customer); err != nil {
        ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }

    if err := c.service.CreateCustomer(customer); err != nil {
        ctx.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create customer"})
        return
    }

    ctx.Status(http.StatusOK)
}

客户对象:

    type Customer struct {
    ID        uint      `gorm:"primarykey"`
    FirstName string    `gorm:"type:varchar(100);not null"`
    LastName  string    `gorm:"type:varchar(100);not null"`
    BirthDate time.Time `gorm:"not null"`
    Gender    string    `gorm:"type:varchar(6);not null"`
    Email     string    `gorm:"type:varchar(100);not null;unique"`
    Address   string    `gorm:"type:varchar(200)"`
}

当我try 添加新客户时,我收到http错误400,因为HTML日期类型与Golang Time对象不匹配. 错误正文为{"error":"parsing time \"2014-05-05\" as \"2006-01-02T15:04:05Z07:00\": cannot parse \"\" as \"T\""} 我怎么才能解决这个问题呢? 提前谢谢你

推荐答案

我收到http错误400,因为HTML日期类型与Golang Time对象不匹配.

请不要这样想这个问题.

真正的问题是:

  1. 在客户端,<input type="date">元素的解析值始终格式化为yyyy-mm-dd(请参见value of <input type="date">).
  2. 在服务器端,ctx.ShouldBindJSON使用encoding/json包来解组请求,该请求使用(*Time).UnmarshalJSON将时间解组为time.Time对象.(*Time).UnmarshalJSON要求时间必须是RFC 3339格式的带引号的字符串(即2006-01-02T15:04:05Z07:00)(见(*Time).UnmarshalJSON).

格式yyyy-mm-dd中的值不满足2006-01-02T15:04:05Z07:00,这就是失败的原因.

要解决这个问题,您可以在客户端将值转换为RFC3339格式,或者在服务器端实现json.Unmarshaler接口以支持yyyy-mm-dd.

a proposal个支持 struct 标签的时间.Format,如果实现它,将使处理这种情况变得很容易.该提案还显示了目前如何解决该问题.

最后一个注意事项是,在真实的应用程序中,您应该定义BirthDate time.Time的含义.例如,假设时区+07:00中的用户说他的出生日期是1990-05-21,则该值被存储到数据库中作为1990-05-20T17:00:00Z.稍后,另一用户在时区-03:00中加载该用户的简档.您将在页面上显示什么内容?

Html相关问答推荐

注册组件不显示当我导航到注册站点

输入表单在奇怪的地方舍入的标签

使用网格时图像溢出容器高度

CSS自定义特性中的URL是否可以相对于定义的CSS文件?

如何才能只给没有孟加拉语Kar符号的字母上色?

如何仅 Select 与子代CSS类匹配的第一个元素

粘滞的导航栏延伸到超过页边距的右侧

Firefox和Chrome在文字装饰和文字阴影方面的不同优先顺序

我无法动态嵌入Instagram帖子,因为无法分配Instagram固定链接

carousel 的垂直滚动按钮居中

UL 的行为就像它不属于任何类别

调整 Rmarkdown 输出的 html_document 的标题和副标题之间的间距

我在桌面版 html css 代码上给出了位置 margin-left margin-top 标签,如何将其删除到手机上以使其响应?

一旦大于最大限制,JQuery 取消 Select 复选框

Tailwind 网格行高度可防止拉伸到最高行的所有相同高度

透明渐变凹矩形

导航丸被选中(活动),但内容未显示.怎么会?

在随机图像下对齐文本

让 Bootstrap 5 模式和背景占据父容器的宽度和高度,而不是全屏

图标未定位到右上角