美文网首页我爱编程
golang time AddDate的一个小细节

golang time AddDate的一个小细节

作者: Tibbersshao | 来源:发表于2018-06-07 10:55 被阅读0次

    如果有用到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,尤其是对年和月直接进行加减操作的。

    相关文章

      网友评论

        本文标题:golang time AddDate的一个小细节

        本文链接:https://www.haomeiwen.com/subject/qswwsftx.html