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
    }
  2. 计算日期相差多少月
    先计算二个日期相差的年,然后计算月,计算月的时候需要补差。计算日的时候也需要这样补差

    // 计算日期相差多少月
    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
    }
0%