go-carbon 1.1.0 版本发布了,增加对 gorm 的支持

够过瘾
 够过瘾
发布于 2020年09月10日
收藏 5

carbon 是一个轻量级、语义化、对IDE友好的日期时间处理库,是PHP Carbon库的Golang实现版本,初衷是为了摆脱Golang反人类的2006-01-02 15:04:05格式化时间设计,支持链式调用和gorm结构体。

如果您觉得不错,请给个star吧
github:github.com/golang-module/carbon
gitee:gitee.com/go-package/carbon

在 gorm 中的应用
gorm.Open 时必须包括 parseTime=True 参数

假设数据表为 users,字段有 id、name、age、birthday、created_at、updated_at、deleted_at

// 用法一,使用carbon.Model自动维护id、created_at、updated_at、deleted_at
type User struct {
    carbon.Model
    Name string `json:"name"`
    Age int `json:"age"`
    Birthday carbon.ToDateTimeString `json:"birthday"`
}
user := User {
    Name: "勾国印"
    Age: 18
    Birthday: "2012-09-09 00:00:00"
}
// json.Marshal(user)输出
{
    "id": 1, 
    "name": "勾国印", 
    "age": 18, 
    "birthday": "2012-09-09 00:00:00", 
    "created_at": "2020-09-09 12:13:14", 
    "updated_at": "2020-09-09 12:13:14", 
    "deleted_at": null
}

// 用法二,不使用carbon.Model
type User struct {
    Name string `json:"name"`
    Age int `json:"age"`
    Birthday carbon.ToDateString `json:"birthday"`
    CreatedAt carbon.ToDateTimeString `json:"created_at"`
    UpdatedAt carbon.ToTimeString `json:"updated_at"`
    DeletedAt carbon.ToTimestamp `json:"deleted_at"`
}
user := User {
    Name: "勾国印"
    Age: 18
    Birthday: "2012-09-09 00:00:00"
}
// json.Marshal(user)输出
{
    "id": 1, 
    "name": "勾国印", 
    "age": 18, 
    "birthday": "2012-09-09", 
    "created_at": "2020-09-09 12:13:14", 
    "updated_at": "12:13:14", 
    "deleted_at": 1599272433
}

更新日志
修复 readme.md 错误描述
完善单元测试
新增对 gorm 结构体的时间格式化支持,支持输出多种标准时间格式
新增 IsJanuary () 方法判断是否是第一月
新增 IsFebruary () 方法判断是否是第二月
新增 IsMarch () 方法判断是否是第三月
新增 IsApril () 方法判断是否是第四月
新增 IsMay () 方法判断是否是第五月
新增 IsJune () 方法判断是否是第六月
新增 IsJuly () 方法判断是否是第七月
新增 IsAugust () 方法判断是否是第八月
新增 IsSeptember () 方法判断是否是第九月
新增 IsOctober () 方法判断是否是第十月
新增 IsNovember () 方法判断是否是第十一月
新增 IsDecember () 方法判断是否是第十二月

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:go-carbon 1.1.0 版本发布了,增加对 gorm 的支持
加载中

精彩评论

fx443
fx443
"2006-01-02 15:04:05" 是个非常好的设计
RafaelShin
RafaelShin
更新很快啊!加油:muscle:
够过瘾
够过瘾
欢迎大家使用,提出宝贵意见
houseme
houseme
:thumbsup:

最新评论(16

fx443
fx443
恢复格式混乱,写在这里了: https://my.oschina.net/fx443/blog/4557747
fx443
fx443
先说下这是个什么设计, 然后大家来评论好不好.
所有的时间格式处理,来源都是*nix上POSIX的date指令,
其输出结果是 $ date:
Fri Sep 11 09:45:43 CST 2020 .
已经成为ISO,RFC的标准格式.
golang的早期开发者, 认为date中%Y%m%M...这些字符码的接口设计是垃圾桶,
于是采用了数值代替格式的方式(并不是他原创).
把上面date输出的每个字段, 分别用 0,1,2,3,4,5,6来指代:
0星期 1月 2日 3时 4分 5秒 6年 7时区 . 这就是2006-01-02 15:04:05的真实设计.
唯一的问题是对东方用户不友好, 我们默认的书写是 年月日时分秒的顺序.
所以并不是0123456而是612345这种乍看混乱的结果.
(OSC评论删除了换行, 大家凑活看吧).

最后, 这个设计好不好呢?
对库的开发者来说, 格式化代码的实现优雅而简单.
对欧美人来说,如123456一般简单.
对没用过date的人来说, 5秒上手.
对被data蹂躏了几十年,YmdHMS了然于胸的人来说, 不习惯.
CharlieJohn
CharlieJohn
其实go开发组很多东西都是故意和其他语言不同,不知道为啥。这个时间确实过于标新立异了。别的语言也用自己觉得有纪念意义的日期字符串搞就完蛋了。
够过瘾
够过瘾
问题是是用这个字符串去格式化时间,常规都是用的Y-m-d H:i:s之类的
CharlieJohn
CharlieJohn
对呀。mysql默认数据格式。
我有药
我有药
返回日期数组,列如返回最近七天的日期数组
够过瘾
够过瘾
最近N天不就是N天前么?
我有药
我有药
来个最近N天函数
一剪梅i
一剪梅i
mark
够过瘾
够过瘾
愿闻其详
返回顶部
顶部