这是我在Golang的代码
dateTime := "2023-01-31T15:51:00Z"
layout := "2006-01-02T15:04:00Z"
time, _ := time.Parse(layout, dateTime)
next1Month := time.AddDate(0, 1, 0) // result is 2023-03-03 15:51:00 +0000 UTC
next2Month := time.AddDate(0, 2, 0) // result is 2023-03-31 15:51:00 +0000 UTC
next3Month := time.AddDate(0, 3, 0) // result is 2023-05-01 15:51:00 +0000 UTC
我的期望
next1Month is 2023-02-28 15:51:00 +0000 UTC
next2Month is 2023-03-31 15:51:00 +0000 UTC
next3Month is 2023-04-31 15:51:00 +0000 UTC
请帮助我与任何关键字或解决方案来解决它。
3条答案
按热度按时间svujldwt1#
十进制算术是连续的。DateTime算术不是连续的:日期时间算法没有固定的规则,它取决于上下文。没有上下文,就不可能确切地知道你想要什么。
下面是DateTime算法的一种形式,它可以产生预期的结果。
https://go.dev/play/p/NLqtlu2OmZ0
a14dhokn2#
AddDate
只是执行基本的数学运算,但你似乎在寻找“本月的最后一天”,这不是简单的数学运算,它需要逻辑。你必须实现这个逻辑。例如,你可以使用每月的1号减去1天:https://go.dev/play/p/Prc7_5rY3K9输出:
gmol16393#
我修好了