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)
}
}
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])
}
}
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