beego orm 时间格式问题

beego 的orm 结构体中时间如果用的是 time.Time 类似于下面这样

Create_time time.Time `orm:"auto_now_add;type(datetime)" form:"-"`
Update_time time.Time `orm:"auto_now;type(datetime)"`

那么在前端渲染时拿到的数据就会是类似2014-07-07T23:58:28+08:00 这种,显然不是通常的显示形式。如果想要拿到2014-07-07 23:58:28这样的形式该怎么办呢?
经过一同搜索之后,仍然没发现什么好办法能直接拿到想要的格式,我说一下大家说的最多的两种方案。
一种是修改/usr/local/go/src/time/time.go源码(复制别人的代码 没有测试)


// MarshalJSON implements the json.Marshaler interface.
// The time is a quoted string in RFC 3339 format, with sub-second precision added if present.
func (t Time) MarshalJSON2() ([]byte, error) {
if y := t.Year(); y < 0 || y >= 10000 {
// RFC 3339 is clear that years are 4 digits exactly.
// See golang.org/issue/4556#c15 for more discussion.
return nil, errors.New("Time.MarshalJSON: year outside of range [0,9999]")
}

b := make([]byte, 0, len(RFC3339Nano)+2)
b = append(b, '"')
b = t.AppendFormat(b, RFC3339Nano)
b = append(b, '"')
return b, nil
}
func (t Time) MarshalJSON() ([]byte, error) {
if y := t.Year(); y < 0 || y >= 10000 {
// RFC 3339 is clear that years are 4 digits exactly.
// See golang.org/issue/4556#c15 for more discussion.
return nil, errors.New("Time.MarshalJSON: year outside of range [0,9999]")
}

b := make([]byte, 0, len("2006-01-02 15:04:05")+2)
b = append(b, '"')
b = t.AppendFormat(b, "2006-01-02 15:04:05")
b = append(b, '"')
return b, nil
}

第二种和第一种其实差不多 只不过是在你的结构体中实现 MarshalJSONUnmarshalJson 或者自定义一种类型重写time

但是这两种我都不太喜欢,所以我直接在模板中进行格式化

{{.Create_time.Format "2006-01-02 15:04:05"}}

参考文章:
https://github.com/astaxie/beego/issues/686
https://studygolang.com/articles/11685
https://blog.csdn.net/wo541075754/article/details/79513484
https://www.jianshu.com/p/5250ef0954b7

你可能感兴趣的:(beego orm 时间格式问题)