golang time AddDate的一個(gè)小細(xì)節(jié)

如果有用到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") 很完美的樣子。

測(cè)試:
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)行加減操作的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容