Caculate time in nanoseconds

Use time.Duration instead of int64 value in seconds.
diff --git a/times.go b/times.go
index 9d48eea..7aa1642 100644
--- a/times.go
+++ b/times.go
@@ -25,14 +25,11 @@
 	return RelTime(then, time.Now(), "ago", "from now")
 }
 
-// Seconds represents the elapsed time between two instants as an int64 second count.
-type Seconds int64
-
 // Magnitude stores one magnitude and the output format for this magnitude of relative time.
 type Magnitude struct {
-	d      int64
+	d      time.Duration
 	format string
-	divby  int64
+	divby  time.Duration
 }
 
 // NewMagnitude returns a Magnitude object.
@@ -42,32 +39,32 @@
 // format is the expected output format string.
 //
 // Also refer to RelTimeMagnitudes for examples.
-func NewMagnitude(d Seconds, format string, divby Seconds) Magnitude {
+func NewMagnitude(d time.Duration, format string, divby time.Duration) Magnitude {
 	return Magnitude{
-		d:      int64(d),
+		d:      d,
 		format: format,
-		divby:  int64(divby),
+		divby:  divby,
 	}
 }
 
 var defaultMagnitudes = []Magnitude{
-	NewMagnitude(1, "now", 1),
-	NewMagnitude(2, "1 second %s", 1),
-	NewMagnitude(Minute, "%d seconds %s", 1),
-	NewMagnitude(2*Minute, "1 minute %s", 1),
-	NewMagnitude(Hour, "%d minutes %s", Minute),
-	NewMagnitude(2*Hour, "1 hour %s", 1),
-	NewMagnitude(Day, "%d hours %s", Hour),
-	NewMagnitude(2*Day, "1 day %s", 1),
-	NewMagnitude(Week, "%d days %s", Day),
-	NewMagnitude(2*Week, "1 week %s", 1),
-	NewMagnitude(Month, "%d weeks %s", Week),
-	NewMagnitude(2*Month, "1 month %s", 1),
-	NewMagnitude(Year, "%d months %s", Month),
-	NewMagnitude(18*Month, "1 year %s", 1),
-	NewMagnitude(2*Year, "2 years %s", 1),
-	NewMagnitude(LongTime, "%d years %s", Year),
-	NewMagnitude(math.MaxInt64, "a long while %s", 1),
+	NewMagnitude(time.Second, "now", time.Second),
+	NewMagnitude(2*time.Second, "1 second %s", time.Second),
+	NewMagnitude(Minute*time.Second, "%d seconds %s", time.Second),
+	NewMagnitude(2*Minute*time.Second, "1 minute %s", time.Second),
+	NewMagnitude(Hour*time.Second, "%d minutes %s", Minute*time.Second),
+	NewMagnitude(2*Hour*time.Second, "1 hour %s", time.Second),
+	NewMagnitude(Day*time.Second, "%d hours %s", Hour*time.Second),
+	NewMagnitude(2*Day*time.Second, "1 day %s", time.Second),
+	NewMagnitude(Week*time.Second, "%d days %s", Day*time.Second),
+	NewMagnitude(2*Week*time.Second, "1 week %s", time.Second),
+	NewMagnitude(Month*time.Second, "%d weeks %s", Week*time.Second),
+	NewMagnitude(2*Month*time.Second, "1 month %s", time.Second),
+	NewMagnitude(Year*time.Second, "%d months %s", Month*time.Second),
+	NewMagnitude(18*Month*time.Second, "1 year %s", time.Second),
+	NewMagnitude(2*Year*time.Second, "2 years %s", time.Second),
+	NewMagnitude(LongTime*time.Second, "%d years %s", Year*time.Second),
+	NewMagnitude(math.MaxInt64, "a long while %s", time.Second),
 }
 
 // RelTime formats a time into a relative string.
@@ -86,33 +83,33 @@
 // example:
 // magitudes:
 // {
-//		NewMagnitude(1, "now", 1),
-//		NewMagnitude(60, "%d seconds %s", 1),
-//		NewMagnitude(120,"a minute %s", 1),
-//		NewMagnitude(360, "%d minutes %s", 60),
+//		NewMagnitude(time.Second, "now", time.Second),
+//		NewMagnitude(60*time.Second, "%d seconds %s", time.Second),
+//		NewMagnitude(120*time.Second,"a minute %s", time.Second),
+//		NewMagnitude(360*time.Second, "%d minutes %s", 60*time.Second),
 // }
 // albl: earlier
 // blbl: later
 //
-// b - a         output
-//  -130         2 minutes later
-//   0           now
-//   30          30 seconds earlier
-//   80          a minute  earlier
-//   340         5 minutes earlier
-//   400         undefined
+// b - a                     output
+//  -130*time.Second         2 minutes later
+//   0                       now
+//   30*time.Second          30 seconds earlier
+//   80*time.Second          a minute  earlier
+//   340*time.Second         5 minutes earlier
+//   400*time.Second         undefined
 func RelTimeMagnitudes(a, b time.Time, albl, blbl string, magnitudes []Magnitude) string {
 	lbl := albl
-	diff := b.Unix() - a.Unix()
+	diff := b.Sub(a)
 
 	after := a.After(b)
 	if after {
 		lbl = blbl
-		diff = a.Unix() - b.Unix()
+		diff = a.Sub(b)
 	}
 
 	n := sort.Search(len(magnitudes), func(i int) bool {
-		return magnitudes[i].d > diff
+		return magnitudes[i].d >= diff
 	})
 
 	if n >= len(magnitudes) {
diff --git a/times_test.go b/times_test.go
index edcb4a2..314da59 100644
--- a/times_test.go
+++ b/times_test.go
@@ -39,25 +39,27 @@
 
 func TestFuture(t *testing.T) {
 	now := time.Now().Unix()
+	// add 1 second offset for test time to balance decimal fraction of time.Now()
+	offset := int64(time.Second)
 	testList{
 		{"now", Time(time.Unix(now, 0)), "now"},
-		{"1 second from now", Time(time.Unix(now+1, 0)), "1 second from now"},
-		{"12 seconds from now", Time(time.Unix(now+12, 0)), "12 seconds from now"},
-		{"30 seconds from now", Time(time.Unix(now+30, 0)), "30 seconds from now"},
-		{"45 seconds from now", Time(time.Unix(now+45, 0)), "45 seconds from now"},
-		{"15 minutes from now", Time(time.Unix(now+15*Minute, 0)), "15 minutes from now"},
-		{"2 hours from now", Time(time.Unix(now+2*Hour, 0)), "2 hours from now"},
-		{"21 hours from now", Time(time.Unix(now+21*Hour, 0)), "21 hours from now"},
-		{"1 day from now", Time(time.Unix(now+26*Hour, 0)), "1 day from now"},
-		{"2 days from now", Time(time.Unix(now+49*Hour, 0)), "2 days from now"},
-		{"3 days from now", Time(time.Unix(now+3*Day, 0)), "3 days from now"},
-		{"1 week from now (1)", Time(time.Unix(now+7*Day, 0)), "1 week from now"},
-		{"1 week from now (2)", Time(time.Unix(now+12*Day, 0)), "1 week from now"},
-		{"2 weeks from now", Time(time.Unix(now+15*Day, 0)), "2 weeks from now"},
-		{"1 month from now", Time(time.Unix(now+30*Day, 0)), "1 month from now"},
-		{"1 year from now", Time(time.Unix(now+365*Day, 0)), "1 year from now"},
-		{"2 years from now", Time(time.Unix(now+2*Year, 0)), "2 years from now"},
-		{"a while from now", Time(time.Unix(now+LongTime, 0)), "a long while from now"},
+		{"1 second from now", Time(time.Unix(now+1, offset)), "1 second from now"},
+		{"12 seconds from now", Time(time.Unix(now+12, offset)), "12 seconds from now"},
+		{"30 seconds from now", Time(time.Unix(now+30, offset)), "30 seconds from now"},
+		{"45 seconds from now", Time(time.Unix(now+45, offset)), "45 seconds from now"},
+		{"15 minutes from now", Time(time.Unix(now+15*Minute, offset)), "15 minutes from now"},
+		{"2 hours from now", Time(time.Unix(now+2*Hour, offset)), "2 hours from now"},
+		{"21 hours from now", Time(time.Unix(now+21*Hour, offset)), "21 hours from now"},
+		{"1 day from now", Time(time.Unix(now+26*Hour, offset)), "1 day from now"},
+		{"2 days from now", Time(time.Unix(now+49*Hour, offset)), "2 days from now"},
+		{"3 days from now", Time(time.Unix(now+3*Day, offset)), "3 days from now"},
+		{"1 week from now (1)", Time(time.Unix(now+7*Day, offset)), "1 week from now"},
+		{"1 week from now (2)", Time(time.Unix(now+12*Day, offset)), "1 week from now"},
+		{"2 weeks from now", Time(time.Unix(now+15*Day, offset)), "2 weeks from now"},
+		{"1 month from now", Time(time.Unix(now+30*Day, offset)), "1 month from now"},
+		{"1 year from now", Time(time.Unix(now+365*Day, offset)), "1 year from now"},
+		{"2 years from now", Time(time.Unix(now+2*Year, offset)), "2 years from now"},
+		{"a while from now", Time(time.Unix(now+LongTime, offset)), "a long while from now"},
 	}.validate(t)
 }
 
@@ -72,28 +74,29 @@
 
 func TestRelTimeMagnitudes(t *testing.T) {
 	magnitudes := []Magnitude{
-		NewMagnitude(1, "now", 1),
-		NewMagnitude(2, "1s %s", 1),
-		NewMagnitude(Minute, "s %s", 1),
-		NewMagnitude(2*Minute, "1m %s", 1),
-		NewMagnitude(Hour, "%dm %s", Minute),
-		NewMagnitude(2*Hour, "1h %s", 1),
-		NewMagnitude(Day, "%dh %s", Hour),
-		NewMagnitude(2*Day, "1D %s", 1),
-		NewMagnitude(Month, "%dD %s", Day),
-		NewMagnitude(2*Month, "1M %s", 1),
-		NewMagnitude(Year, "%dM %s", Month),
-		NewMagnitude(18*Month, "1Y %s", 1),
-		NewMagnitude(2*Year, "2Y %s", 1),
+		NewMagnitude(1*time.Second, "now", time.Second),
+		NewMagnitude(2*time.Second, "1s %s", time.Second),
+		NewMagnitude(Minute*time.Second, "s %s", time.Second),
+		NewMagnitude(2*Minute*time.Second, "1m %s", time.Second),
+		NewMagnitude(Hour*time.Second, "%dm %s", Minute*time.Second),
+		NewMagnitude(2*Hour*time.Second, "1h %s", time.Second),
+		NewMagnitude(Day*time.Second, "%dh %s", Hour*time.Second),
+		NewMagnitude(2*Day*time.Second, "1D %s", time.Second),
+		NewMagnitude(Month*time.Second, "%dD %s", Day*time.Second),
+		NewMagnitude(2*Month*time.Second, "1M %s", time.Second),
+		NewMagnitude(Year*time.Second, "%dM %s", Month*time.Second),
+		NewMagnitude(18*Month*time.Second, "1Y %s", time.Second),
+		NewMagnitude(2*Year*time.Second, "2Y %s", time.Second),
 	}
 	now := time.Now().Unix()
+	timeNow := time.Unix(now, 0)
 	testList{
-		{"now", RelTimeMagnitudes(time.Unix(now, 0), time.Now(), "ago", "later", magnitudes), "now"},
-		{"1 second from now", RelTimeMagnitudes(time.Unix(now+1, 0), time.Now(), "ago", "later", magnitudes), "1s later"},
+		{"now", RelTimeMagnitudes(time.Unix(now, 0), timeNow, "ago", "later", magnitudes), "now"},
+		{"1 second from now", RelTimeMagnitudes(time.Unix(now+1, 1), timeNow, "ago", "later", magnitudes), "1s later"},
 		// Unit week has been removed from magnitudes
-		{"1 week ago", RelTimeMagnitudes(time.Unix(now-12*Day, 0), time.Now(), "ago", "", magnitudes), "12D ago"},
-		{"3 months ago", RelTimeMagnitudes(time.Unix(now-99*Day, 0), time.Now(), "ago", "later", magnitudes), "3M ago"},
-		{"1 year ago", RelTimeMagnitudes(time.Unix(now-365*Day, 0), time.Now(), "", "later", magnitudes), "1Y "},
-		{"out of defined magnitudes", RelTimeMagnitudes(time.Unix(now+LongTime, 0), time.Now(), "ago", "later", magnitudes), "undefined"},
+		{"1 week ago", RelTimeMagnitudes(time.Unix(now-12*Day, 0), timeNow, "ago", "", magnitudes), "12D ago"},
+		{"3 months ago", RelTimeMagnitudes(time.Unix(now-99*Day, 0), timeNow, "ago", "later", magnitudes), "3M ago"},
+		{"1 year ago", RelTimeMagnitudes(time.Unix(now-365*Day, 0), timeNow, "", "later", magnitudes), "1Y "},
+		{"out of defined magnitudes", RelTimeMagnitudes(time.Unix(now+LongTime, 0), timeNow, "ago", "later", magnitudes), "undefined"},
 	}.validate(t)
 }