如何使用golang获取当月的开始日期和结束日期?

I want to make a simple program of golang which only tell me the current month start date and and month's end date. There is also a condition in this is that if the user will entered the month and year then it will give me the start date and end date of that year and month. For this I have tried the below program but it will not giving me the right results:

package main

import (
  "fmt"
  "time"
)

func main() {
  var year int
  var month int
  year = 2018
  month = 1
  if year != 0 && month != 0 {
     t2 := time.Now().AddDate(year, month, 0)
    fmt.Println(t2)
  } else {
    t2 := time.Now().AddDate(0, 0, 0)
    fmt.Println(t2)
 }
}

go playground link

Can any body tell me how I will correct the program.

Thanks in advance.

Umm You have to just see the below code I have written for you and just read the comments and learn it. By taking the reference of this and this time package in golang:

package main

import (
 "fmt"
 "strings"
 "time"
)

func main() {
 var year int
 year = 2019
 currentLocation := time.Now().Location() // got current location
 if year != 0 {
    firstOfMonth := time.Date(year, time.February, 1, 0, 0, 0, 0, currentLocation) // first date of the month
    fmt.Println(firstOfMonth)
    lastOfMonth := firstOfMonth.AddDate(0, 1, -1).Format("2006-01-02 00:00:00 -0000") // last date of the month 
    fmt.Println(lastOfMonth)
    onlyDate := strings.Split(lastOfMonth, " ")
    fmt.Println(onlyDate[0])
 } 
}

go playground link

Edited

package main

import (
 "fmt"
 "time"
)

func main() {
 month := 1
 fmt.Println(time.Month(month))
}

converting int month into time link playground

Hope it will help you:).

For example,

package main

import (
    "fmt"
    "time"
)

func monthInterval(y int, m time.Month) (firstDay, lastDay time.Time) {
    firstDay = time.Date(y, m, 1, 0, 0, 0, 0, time.UTC)
    lastDay = time.Date(y, m+1, 1, 0, 0, 0, -1, time.UTC)
    return firstDay, lastDay
}

func main() {
    var (
        y int
        m time.Month
    )

    y, m, _ = time.Now().Date()
    first, last := monthInterval(y, m)
    fmt.Println(first.Format("2006-01-02"))
    fmt.Println(last.Format("2006-01-02"))

    y, m = 2018, time.Month(2)
    first, last = monthInterval(y, m)
    fmt.Println(first.Format("2006-01-02"))
    fmt.Println(last.Format("2006-01-02"))
}

Output:

2018-10-01
2018-10-31
2018-02-01
2018-02-28

Playground: https://play.golang.org/p/TkzCo9jLpZR

You can do with time package in golang itself.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Now()
    fmt.Println(BeginningOfMonth(t))
    fmt.Println(EndOfMonth(t))

    // If you need only date use Format(). But remember Format() will return as a string
    dateFormat := "2006-01-02"
    fmt.Println(BeginningOfMonth(t).Format(dateFormat))
    fmt.Println(EndOfMonth(t).Format(dateFormat))
}

func BeginningOfMonth(t time.Time) time.Time {
    return time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, t.Location())
}

func EndOfMonth(t time.Time) time.Time {
    return BeginningOfMonth(t).AddDate(0, 1, 0).Add(-time.Second)
}

Output:

2018-10-01 00:00:00 +0530 IST

2018-10-31 23:59:59 +0530 IST

2018-10-01

2018-10-31