Метод time.Time.AddDate

Метод AddDate прибавляет к исходной временной метке указанное количество лет, месяцев и дней. Он возвращает новое значение time.Time, не изменяя исходное. В первый параметр мы передаем количество лет, во второй - количество месяцев, в третий - количество дней. Отрицательные значения позволяют вычитать соответствующие промежутки времени.

Синтаксис

got.AddDate(years, months, days)

Пример

Давайте прибавим к текущей дате один год, два месяца и три дня:

gopackage 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"))
}

Результат выполнения кода:

go"2025-03-15"
"2026-05-18"

Пример

Давайте вычтем из даты один год и один месяц с помощью отрицательных значений:

gopackage 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"))
}

Результат выполнения кода:

go"2025-03-15"
"2024-02-15"

Пример

Метод AddDate корректно обрабатывает переполнение месяцев и дней. Например, при прибавлении одного месяца к 31 января получится 28 или 29 февраля в зависимости от високосности года:

gopackage 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"))
}

Результат выполнения кода:

go"2025-01-31"
"2025-02-28"

Пример

Метод можно применять к любой временной метке, включая время с часовым поясом:

gopackage 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"))
}

Результат выполнения кода:

go"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,
    который форматирует временную метку в строку