我想要获得当月的第一天和最后一天.您可以添加日期和小时但不是月份,我想从下个月减去一天以获得本月的最后一天.像这样的东西:
package main
import (
"fmt"
"time"
)
func main() {
date := time.Now()
nextMonth := date.Add(time.Month)
LastDay := nextMonth.Add(-time.Hour * 24)
fmt.Println(LastDay)
}
Run Code Online (Sandbox Code Playgroud)
Ami*_*pta 29
time.Month是一种类型,而不是一种价值,所以你不能Add这样.此外,你的逻辑是错误的,因为如果你添加一个月并减去一天,你没有到月底,你会在下个月中旬得到一些东西.如果今天是4月24日,你将获得5月23日.
以下代码将执行您正在寻找的内容:
package main
import (
"time"
"fmt"
)
func main() {
now := time.Now()
currentYear, currentMonth, _ := now.Date()
currentLocation := now.Location()
firstOfMonth := time.Date(currentYear, currentMonth, 1, 0, 0, 0, 0, currentLocation)
lastOfMonth := firstOfMonth.AddDate(0, 1, -1)
fmt.Println(firstOfMonth)
fmt.Println(lastOfMonth)
}
Run Code Online (Sandbox Code Playgroud)
Shr*_*yas 16
不确定何时AddDate(...)添加到time.Time,但很可能是在这个问题出现黄金时间之后添加的 :)
这是实现相同目标的另一种方法time.Time.AddDate(...)-
func BeginningOfMonth(date time.Time) (time.Time) {
return date.AddDate(0, 0, -date.Day() + 1)
}
func EndOfMonth(date time.Time) (time.Time) {
return date.AddDate(0, 1, -date.Day())
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用today := time.Now()它并将其传递给这样的一个/两个函数 -eom := EndOfMonth(today)以获得适当的日期。
如果时间、夏令时等很重要,那么在获得日期后在上面装饰这些细节应该非常简单。
最后,这是一个游乐场链接,您可以在其中玩耍 - https://play.golang.org/p/DxnGuqh6g4k
gab*_*abs 13
该@阿平的回答是危险的,因为现在的lib使得许多错误的假设(它咬了我的脚太).
现在的lib不考虑夏令时和许多其他事情:https:
//github.com/jinzhu/now/issues/13
这就是我这样做的方式:
t := time.Now()
firstday := time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, time.Local)
lastday := firstday.AddDate(0, 1, 0).Add(time.Nanosecond * -1)
Run Code Online (Sandbox Code Playgroud)
你现在可以使用库,它非常简单:
now.BeginningOfMonth() // 2013-11-01 00:00:00 Fri
now.EndOfMonth() // 2013-11-30 23:59:59.999999999 Sat
Run Code Online (Sandbox Code Playgroud)
请查看详细信息:https://github.com/jinzhu/now
I would do it like this:
// LastDayOfMonth returns 28-31 - the last day in the month of the time object
// passed in to the function
func LastDayOfMonth(t time.Time) int {
firstDay := time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, time.UTC)
lastDay := firstDay.AddDate(0, 1, 0).Add(-time.Nanosecond)
return lastDay.Day()
}
Run Code Online (Sandbox Code Playgroud)
a
小智 5
这也可以是一个解决方案:
currentTimestamp := time.Now().UTC()
currentYear, currentMonth, _ := currentTimestamp.Date()
currentLocation := currentTimestamp.Location()
firstOfMonth := time.Date(currentYear, currentMonth, 1, 0, 0, 0, 0, currentLocation)
lastOfMonth := time.Date(currentYear, currentMonth+1, 0, 23, 59, 59, 999999999, currentLocation)
fmt.Println(firstOfMonth)
fmt.Println(lastOfMonth)
Run Code Online (Sandbox Code Playgroud)
输出:
firstOfMonth: 2019-11-01 00:00:00 +0000 UTC
lastOfMonth: 2019-11-30 23:59:59.999999999 +0000 UTC
Run Code Online (Sandbox Code Playgroud)
单击此处尝试一下: Playground 链接
| 归档时间: |
|
| 查看次数: |
14820 次 |
| 最近记录: |