golang time AddDate的一个小细节

如果有用到AddDate的,有三条建议:
不要用AddDate对月进行加减操作
不要用AddDate对月进行加减操作
不要用AddDate对月进行加减操作

有一个需求需要对传入的时间减去一个月,拿到上一个月的年月(如:2006-01),再进行操作。
那么就: str := date.AddDate(0,-1,0).Format("2006-01") 很完美的样子。

测试:
image.png

很显然, 当传入的时间是2018-07-31的时候,减去一个月变成了2018-07-01。
这就很尴尬了,难道AddDate只能加不能减? 试一下加一个月:
image.png

2018-05-30 加一个月变成了2018-07-01。

看一下官方文档:
AddDate会将结果规范化,类似Date函数的做法。因此,举个例子,给时间点October 31添加一个月,会生成时间点December 1。(从时间点November 31规范化而来)

再看一下源码
image.png

所以当你给month加 1,day 是不会变的。5-31变成 6-31,最后转化为 7-1。
所以大家在用任何官方、非官方的接口,都一定要仔细阅读接口文档呀,不然很容易出问题。

一定要慎用AddDate,尤其是对年和月直接进行加减操作的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容