V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
yekern
V2EX  ›  Go 编程语言

Gorm 格式化时间这样处理可行不可行

  •  
  •   yekern ·
    yekern · 131 天前 · 1131 次点击
    这是一个创建于 131 天前的主题,其中的信息可能已经有所发展或是发生改变。
    时间结构体
    type UseDateTime struct {
      	CreatedAt    *time.Time `json:"-"`
    	CreatedAtStr string     `json:"created_at" gorm:"-"`
    	UpdatedAt    *time.Time `json:"-"`
    	UpdatedAtStr string     `json:"updated_at" gorm:"-"`
    }
    

    结构体多添加两个字段 CreatedAtStrUpdatedAtStr用 Tag 来控制不参与存储

    使用 Gorm 自带的 Hook AfterFind

    func (u *UseDateTime) AfterFind(tx *gorm.DB) (err error) {
    	if u.CreatedAt != nil {
    		u.CreatedAtStr = u.CreatedAt.Format("2006-01-02 15:04:05")
    	}
    	if u.UpdatedAt != nil {
    		u.UpdatedAtStr = u.UpdatedAt.Format("2006-01-02 15:04:05")
    	}
    	return
    }
    

    最终输出

    {
      "code": 200,
      "data": [
        {
          "id": 1,
          "username": "admin",
          "created_at": "2019-10-29 00:28:05",
          "updated_at": "2024-06-13 14:09:15"
        }
      ]
    }
    
    4 条回复
    CEBBCAT
        1
    CEBBCAT  
       131 天前
    楼主可以同时考虑这几种方案:
    1. 定义响应专用的结构体。如果嫌麻烦,可以找找看代码生成器
    2. 返回 unix 时间戳
    CEBBCAT
        2
    CEBBCAT  
       131 天前
    另外 V2EX 似乎不让用别人照片当头像(以 /settings/avatar 为准)
    yekern
        3
    yekern  
    OP
       131 天前
    @CEBBCAT 感谢提醒!
    highFreqSurfer
        4
    highFreqSurfer  
       131 天前
    给 time.Time 定义个别名, 实现 MarshalJSON() ([]byte, error) Scan(value interface{}) error Value() (driver.Value, error) 三个函数, 然后用这个别名替换掉你 model 里的*time.Time 就好了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2465 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:49 · PVG 23:49 · LAX 07:49 · JFK 10:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.