Метод time.Time.AddDate
Метод AddDate прибавляет к исходной временной метке указанное количество лет, месяцев и дней. Он возвращает новое значение time.Time, не изменяя исходное. В первый параметр мы передаем количество лет, во второй - количество месяцев, в третий - количество дней. Отрицательные значения позволяют вычитать соответствующие промежутки времени.
Синтаксис
t.AddDate(years, months, days)
Пример
Давайте прибавим к текущей дате один год, два месяца и три дня:
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2025, time.March, 15, 10, 30, 0, 0, time.UTC)
res := t.AddDate(1, 2, 3)
fmt.Println(t.Format("2006-01-02"))
fmt.Println(res.Format("2006-01-02"))
}
Результат выполнения кода:
"2025-03-15"
"2026-05-18"
Пример
Давайте вычтем из даты один год и один месяц с помощью отрицательных значений:
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2025, time.March, 15, 10, 30, 0, 0, time.UTC)
res := t.AddDate(-1, -1, 0)
fmt.Println(t.Format("2006-01-02"))
fmt.Println(res.Format("2006-01-02"))
}
Результат выполнения кода:
"2025-03-15"
"2024-02-15"
Пример
Метод AddDate корректно обрабатывает переполнение месяцев и дней. Например, при прибавлении одного месяца к 31 января получится 28 или 29 февраля в зависимости от високосности года:
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2025, time.January, 31, 10, 30, 0, 0, time.UTC)
res := t.AddDate(0, 1, 0)
fmt.Println(t.Format("2006-01-02"))
fmt.Println(res.Format("2006-01-02"))
}
Результат выполнения кода:
"2025-01-31"
"2025-02-28"
Пример
Метод можно применять к любой временной метке, включая время с часовым поясом:
package main
import (
"fmt"
"time"
)
func main() {
loc, _ := time.LoadLocation("Europe/Moscow")
t := time.Date(2025, time.June, 1, 12, 0, 0, 0, loc)
res := t.AddDate(1, 0, -5)
fmt.Println(t.Format("2006-01-02 15:04:05 MST"))
fmt.Println(res.Format("2006-01-02 15:04:05 MST"))
}
Результат выполнения кода:
"2025-06-01 12:00:00 MSK"
"2026-05-27 12:00:00 MSK"
Смотрите также
-
метод
time.Time.Add,
который прибавляет продолжительность к временной метке -
метод
time.Time.Sub,
который вычисляет разницу между двумя временными метками -
функцию
time.Now,
которая возвращает текущее время -
метод
time.Time.Format,
который форматирует временную метку в строку