如果有用到AddDate的,有三條建議:
不要用AddDate對(duì)月進(jìn)行加減操作
不要用AddDate對(duì)月進(jìn)行加減操作
不要用AddDate對(duì)月進(jìn)行加減操作
有一個(gè)需求需要對(duì)傳入的時(shí)間減去一個(gè)月,拿到上一個(gè)月的年月(如:2006-01),再進(jìn)行操作。
那么就: str := date.AddDate(0,-1,0).Format("2006-01") 很完美的樣子。

image.png
很顯然, 當(dāng)傳入的時(shí)間是2018-07-31的時(shí)候,減去一個(gè)月變成了2018-07-01。
這就很尷尬了,難道AddDate只能加不能減? 試一下加一個(gè)月:

image.png
2018-05-30 加一個(gè)月變成了2018-07-01。
看一下官方文檔:
AddDate會(huì)將結(jié)果規(guī)范化,類似Date函數(shù)的做法。因此,舉個(gè)例子,給時(shí)間點(diǎn)October 31添加一個(gè)月,會(huì)生成時(shí)間點(diǎn)December 1。(從時(shí)間點(diǎn)November 31規(guī)范化而來(lái))

image.png
所以當(dāng)你給month加 1,day 是不會(huì)變的。5-31變成 6-31,最后轉(zhuǎn)化為 7-1。
所以大家在用任何官方、非官方的接口,都一定要仔細(xì)閱讀接口文檔呀,不然很容易出問(wèn)題。
一定要慎用AddDate,尤其是對(duì)年和月直接進(jìn)行加減操作的。