-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdatediff.go
60 lines (55 loc) · 948 Bytes
/
datediff.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package datediff
import (
"time"
)
type Datetime struct{}
/*
datediff
para : birth date
calculate date
return calculate date - birth date = year month day
*/
func (*Datetime) Birthday(b, e time.Time) (year, month, day int) {
var closeDay time.Time
var leapday int = 0 //leap year Feb 29 add 1 year will by March 1
year, month, day = 0, 0, 0
if b.After(e) {
b, e = e, b
}
//try years
for {
if !b.AddDate(year, 0, 0).After(e) {
year++
} else {
year--
break
}
}
//try months
for {
if !b.AddDate(0, month, 0).After(e) {
month++
} else {
month--
break
}
}
//try days add all months before then calcdate
closeDay = b.AddDate(0, month, 0)
if closeDay.Day() != b.Day() {
leapday = 1
}
month = month % 12
//try days
for {
if !closeDay.AddDate(0, 0, day).After(e) {
//fmt.Println("day:", closeDay.AddDate(0, 0, day))
day++
} else {
day--
break
}
}
day += leapday
return
}