Go 计算两个日期之间相差几日、几月

  1. 两个日期相差多少天
    time包有个函数Parse可以将时间字符串解析成Time对象,而Time对象有个Sub方法可以计算与某个时间的差,返回值是Duration对象,而Duration有一个Hours方法,除以24就是天数了
// 计算日期相差多少天
// 返回值day>0, t1晚于t2; day<0, t1早于t2
func SubDays(t1,t2 time.Time)(day int)  {
    swap := false
    if t1.Unix() < t2.Unix(){
        t_:= t1
        t1 = t2
        t2 = t_
        swap = true
    }

    day = int(t1.Sub(t2).Hours()/24)

    // 计算在被24整除外的时间是否存在跨自然日
    if int(t1.Sub(t2).Milliseconds())%86400000 > int(86400000-t2.Unix()%86400000) {
        day += 1
    }

    if swap {
        day = -day
    }

    return
}
  1. 计算日期相差多少月
    先计算二个日期相差的年,然后计算月,计算月的时候需要补差。计算日的时候也需要这样补差
// 计算日期相差多少月
func SubMonth(t1, t2 time.Time) (month int) {
    y1 := t1.Year()
    y2 := t2.Year()
    m1 := int(t1.Month())
    m2 := int(t2.Month())
    d1 := t1.Day()
    d2 := t2.Day()

    yearInterval := y1 - y2
    // 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数
    if m1 < m2 || m1 == m2 && d1 < d2 {
        yearInterval--
    }
    // 获取月数差值
    monthInterval := (m1 + 12) - m2
    if d1 < d2 {
        monthInterval--
    }
    monthInterval %= 12
    month = yearInterval*12 + monthInterval
    return
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 不做软件项目可能永远也不会考虑日期和时间的使用问题。上学时做的最多的是数学模型和算法的仿真验证,根本不用操心软件里...
    CoderShangfeng阅读 1,482评论 0 1
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 3,272评论 0 9
  • 项目管理术语英汉对照表2018-7-20 A Abstract Resource 抽象资源 Abstraction...
    007明_阳阅读 6,711评论 0 51
  • “我因为读书时间有点长,比较自我一点,比较有个性一点,后来发现人的性格都是有盲点的,就像你对待你的事业一样,我现在...
    唯一的岛屿阅读 2,496评论 0 2
  • 一个男孩跟自己从小一起成长的女孩,一起欢笑一起闹,一起分享彼此的喜怒哀乐。男孩一直想通过自己努力考上自己理想大学,...
    YA唯识阅读 420评论 0 0

友情链接更多精彩内容