获取两个日期之间的真实日历天数

Tro*_*ody 5 go

我试图在 Go 中获得两个日期之间的天数,但是当我得到时间(小时)的差异,然后除以每天的时间量时,我遇到了一个问题。

问题:如果日期不同(5 月 7 日和 5 月 8 日)但两者之间的时间低于 24 小时,我的代码会计算在内,因为两者之间没有天数。

我想要的是:计算中间的真实天数。

// Days
firstDay := firstDate.Unix()
lastDay := lastDate.Unix()
fmt.Println("firstDay: ", firstDay)
fmt.Println("lastDay: ", lastDay)

if firstDay > lastDay {
        fmt.Println("IS TO SMALL")
    return
}

// businessDays = 
businessDays := (lastDay - firstDay) / 86400
fmt.Println("businessDays: ", businessDays)
Run Code Online (Sandbox Code Playgroud)

非常感谢。

zou*_*ing 7

  1. 使用Duration.Hours()得到小时
  2. 使用math.Ceil()查找日历天
  3. 使用Time.Truncate()截断小时和分钟,只保存一天

源代码:

package main

import (
    "fmt"
    "math"
    "time"
)

func main() {
    d1, err := time.Parse("200601021504", "201801020001")
    if err != nil {
        panic(err)
    }
    d2, err := time.Parse("200601021504", "201801020002")
    if err != nil {
        panic(err)
    }

    newD1 := d1.Truncate(time.Hour * 24)
    newD2 := d2.Truncate(time.Hour * 24)

    fmt.Printf("days: %v\n", math.Ceil(newD2.Sub(newD1).Hours()/24))

}
Run Code Online (Sandbox Code Playgroud)

  • 当日期范围跨越 DST 更改时,这可能会关闭 1。 (2认同)
  • 这不一样吗?如果我有 5 月 7 日晚上 11:59 和 5 月 8 日上午 00:01,它应该算 1 天,即使我之间只有几分钟。但同时,如果我在同一日期并且差异很小,它应该返回 0。 (2认同)