Как получить начальную и конечную даты текущего месяца, используя golang? - PullRequest
0 голосов
/ 31 октября 2018

Я хочу составить простую программу golang, которая будет сообщать мне только дату начала текущего месяца и дату окончания месяца. Существует также условие, заключающееся в том, что если пользователь введет месяц и год, он предоставит мне дату начала и дату окончания этого года и месяца. Для этого я попробовал приведенную ниже программу, но она не дает правильных результатов:

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

перейти на игровую площадку ссылка

Может ли какой-нибудь орган сказать мне, как я буду исправлять программу.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

Например,

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

Выход:

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

Детская площадка: https://play.golang.org/p/TkzCo9jLpZR

0 голосов
/ 31 октября 2018

Вы можете сделать с пакетом времени в самом golang .

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

Выход:

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

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

2018-10-01

2018-10-31

0 голосов
/ 31 октября 2018

Умм. Вы просто должны увидеть код, который я написал для вас ниже, просто прочитать комментарии и изучить его. Принимая ссылку это и на этот раз пакет в Голанге :

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

перейти на игровую площадку ссылка

Отредактированный

package main

import (
 "fmt"
 "time"
)

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

преобразование целого месяца в игровую площадку с указанием времени

Надеюсь, это поможет вам:).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...