Related Articles
Calculating total number of Hours, Days, Minutes and Seconds between two dates in Golang
• Last Updated : 10 May, 2020

To get the number of days between two dates, we can calculate the number of days from the beginning 0/0/0000 to the first date and the second date and compute their difference.

Examples:

```Input: 2020-04-27 23:35:00, 2018-5-12 12:43:23
Output: 716 days, 10 hours, 51 minutes, 37 seconds

Input: 2014-02-25 05:50:20, 2003-12-13 21:42:12
Output: 3726 days, 8 hours, 8 minutes, 8 seconds
```

To calculate the time difference, we can calculate hours2-hours1, minutes2-minutes1, seconds2-seconds1, and perform some operations (shown in the code from line 65 to line 80) to avoid negative values.

 `// Golang program for Calculating the total number``// of Hours, Days, Minutes and Seconds ``// between two dates``package main`` ` `import (``    ``"fmt"``    ``"time"``)`` ` `// This function counts the``// number of leap years``// since the starting of time``// to the current year that``// is passed``func leapYears(date ``time``.Time) (leaps ``int``) {`` ` `    ``// returns year, month,``    ``// date of a time object``    ``y, m, _ := date.Date()`` ` `    ``if` `m <= 2 {``        ``y--``    ``}``    ``leaps = y/4 + y/400 - y/100``    ``return` `leaps``}`` ` `// The function calculates the``// difference between two dates and times``// and returns the days, hours, minutes,``// seconds between two dates`` ` `func getDifference(a, b ``time``.Time) (days, hours, minutes, seconds ``int``) {`` ` `    ``// month-wise days``    ``monthDays := ``int``{31, 28, 31, 30, 31,``                 ``30, 31, 31, 30, 31, 30, 31}`` ` `    ``// extracting years, months,``    ``// days of two dates``    ``y1, m1, d1 := a.Date()``    ``y2, m2, d2 := b.Date()`` ` `    ``// extracting hours, minutes,``    ``// seconds of two times``    ``h1, min1, s1 := a.Clock()``    ``h2, min2, s2 := b.Clock()`` ` `    ``// totalDays since the ``    ``// beginning = year*365 + number_of_days``    ``totalDays1 := y1*365 + d1`` ` `    ``// adding days of the months ``    ``// before the current month``    ``for` `i := 0; i < (``int``)(m1)-1; i++ {``        ``totalDays1 += monthDays[i]``    ``}`` ` `    ``// counting leap years since``    ``// beginning to the year "a"``    ``// and adding that many extra ``    ``// days to the totaldays``    ``totalDays1 += leapYears(a)`` ` `    ``// Similar procedure for second date``    ``totalDays2 := y2*365 + d2`` ` `    ``for` `i := 0; i < (``int``)(m2)-1; i++ {``        ``totalDays2 += monthDays[i]``    ``}`` ` `    ``totalDays2 += leapYears(b)`` ` `    ``// Number of days between two days``    ``days = totalDays2 - totalDays1`` ` `    ``// calculating hour, minutes,``    ``// seconds differences``    ``hours = h2 - h1``    ``minutes = min2 - min1``    ``seconds = s2 - s1`` ` `    ``// if seconds difference goes below 0,``    ``// add 60 and decrement number of minutes``    ``if` `seconds < 0 {``        ``seconds += 60``        ``minutes--``    ``}`` ` `    ``// performing similar operations``    ``// on minutes and hours``    ``if` `minutes < 0 {``        ``minutes += 60``        ``hours--``    ``}`` ` `    ``// performing similar operations``    ``// on hours and days``    ``if` `hours < 0 {``        ``hours += 24``        ``days--``    ``}`` ` `    ``return` `days, hours, minutes, seconds`` ` `}`` ` `// Driver code`` ` `func main() {`` ` `    ``// Syntax for time date:``    ``// d := time.Date(year, month, days, hours,``    ``// minutes, seconds, nanoseconds, timeZone)`` ` `    ``date1 := ``time``.Date(2020, 4, 27, 23, 35, 0, 0, ``time``.UTC)``    ``date2 := ``time``.Date(2018, 5, 12, 12, 43, 23, 0, ``time``.UTC)`` ` `    ``// if date1 occurs after date2 then ``    ``// swap days since absolute ``    ``// difference is being calculated``    ``if` `date1.After(date2) {``        ``date1, date2 = date2, date1``    ``}``    ``// Calling function and getting``    ``// difference between two dates``    ``days, hours, minutes, seconds := getDifference(date1, date2)`` ` `    ``// Printing the difference``    ``fmt.Printf(``"%v days, %v hours, %v minutes, %v seconds"``,``                             ``days, hours, minutes, seconds)`` ` `}`

Output:

```716 days, 10 hours, 51 minutes, 37 seconds
```

My Personal Notes arrow_drop_up