根据生日计算年龄

18393910396 · 2018-02-10 09:43:17 · 3723 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-02-10 09:43:17 的主题,其中的信息可能已经有所发展或是发生改变。

func GetYearDiffer(start_time, end_time string) int {
    var Age int64
    var pslTime string
    if strings.Index(start_time, ".") != -1 {
        pslTime = "2006.01.02"
    } else if strings.Index(start_time, "-") != -1 {
        pslTime = "2006-01-02"
    } else {
        pslTime = "2006/01/02"
    }
    t1, err := time.ParseInLocation(pslTime, start_time, time.Local)
    t2, err := time.ParseInLocation("2006-01-02", end_time, time.Local)

    if err == nil && t1.Before(t2) {
        diff := t2.Unix() - t1.Unix()
        Age = diff / (3600 * 365 * 24)
        return int(Age)
    } else {
        return int(Age)
    }
}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3723 次点击  
加入收藏 微博
3 回复  |  直到 2018-02-27 10:53:16
jarlyyn
jarlyyn · #1 · 7年之前

1.一年又不是一定是365天 2.golang有time.duration类型,转成时间戳再减是什么骚操作…… 3.出错了返回0又是什么骚操作……

最后,计算年龄这一块不是应该算年的差值,然后根据月份的大小进行调整就好了么……

VoVampire
VoVampire · #2 · 7年之前

我也在写一个计算年龄的代码段,与君分享(PS:需求是不用精确到日)

if PbBirthday != "" {
    birthday := strings.Split(order.PbBirthday,"-")

    if len(birthday) < 3 {
        return nil,errors.New("出生日期格式解析错误")
    }

    birYear,_ := strconv.Atoi(birthday[0])
    birMonth,_ := strconv.Atoi(birthday[1])

    age := time.Now().Year() - birYear

    if int(time.Now().Month()) < birMonth {
        age--
    }

    return age,nil
} else {
    return nil,errors.New("出生日期为空")
}
18393910396
18393910396 · #3 · 7年之前
jarlyynjarlyyn #1 回复

1.一年又不是一定是365天 2.golang有time.duration类型,转成时间戳再减是什么骚操作…… 3.出错了返回0又是什么骚操作…… 最后,计算年龄这一块不是应该算年的差值,然后根据月份的大小进行调整就好了么……

你说的有道理。我这个方法确实不太准确

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传