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