gorm 不支持自动转化成数据库精度,postgres支持.后面6位,所以如果直接使用 now.New(t).EndOfMonth() 去往数据库更新的话,就会导致被错误的前进了一秒,所以要把后面多余的精度设为0

import (
    "github.com/jinzhu/now"
    "time"
)

// 返回 t 对应的 local time 的月底时间
// 返回的是 local time
func EndOfMonth(t time.Time) time.Time {
    endOfMonthTime := now.New(t.In(TimeLocal)).EndOfMonth()
    // gorm 不支持自动转化成数据库精度,postgres支持.后6位)
    // error: gorm update 2020-02-04 15:59:59.999999999 +0000 UTC to 2020-02-04 16:00:00 +0000 UTC
    return endOfMonthTime.Add(-999 * time.Nanosecond).In(TimeLocal)
}
utils.EndOfMonth(time.Now())
# => 2020-03-31 23:59:59.999999 +0800 CST

now.EndOfMonth()
# => 2020-03-31 23:59:59.999999999 +0800 CST
0条评论 顺序楼层
请先登录再回复