Multiple Web Intelligence user’s questions are regarding date and time and especially difference between 2 dates.
Web Intelligence already offers 2 functions dedicated to dates difference:
Those functions work well when we are manipulating dates but the result is not perfect when we are manipulating date + time: datetime, timestamp, etc.
Moreover, there is no out of the box functions to compute the difference for years, quarters, hours, minutes and seconds.
The goal of this document is to present you how to compute time difference functions with correct results.
Let’s assume we have 2 variables containing date + time and respectively named:
Here is the formula:
=If ToNumber(FormatDate([End Date];"yyyyMMddHHmmss")) - ToNumber(FormatDate([Start Date];"yyyyMMddHHmmss")) >= 0
Then
ToNumber(FormatDate([End Date];"yyyy")) - ToNumber(FormatDate([Start Date];"yyyy")) - (If ToNumber(FormatDate([End Date];"MMddHHmmss")) - ToNumber(FormatDate([Start Date];"MMddHHmmss")) >= 0 Then 0 Else 1)
Else
(ToNumber(FormatDate([Start Date];"yyyy")) - ToNumber(FormatDate([End Date];"yyyy")) - (If ToNumber(FormatDate([Start Date];"MMddHHmmss")) - ToNumber(FormatDate([End Date];"MMddHHmmssMM")) >= 0 Then 0 Else 1)) * -1
Formula explanation:
Here is the formula:
=If ToNumber(FormatDate([End Date];"yyyyMMddHHmmss")) - ToNumber(FormatDate([Start Date];"yyyyMMddHHmmss")) >= 0
Then
((ToNumber(FormatDate([End Date];"yyyy")) - ToNumber(FormatDate([Start Date];"yyyy"))) * 4) + (If ToNumber(FormatDate([End Date];"MMddHHmmss")) - ToNumber(FormatDate([Start Date];"MMddHHmmss")) >= 0 Then Truncate((ToNumber(FormatDate([End Date];"MM")) - ToNumber(FormatDate([Start Date];"MM"))) / 3;0) Else Truncate((ToNumber(FormatDate([Start Date];"MM")) - ToNumber(FormatDate([End Date];"MM"))) / 3;0))
Else
(((ToNumber(FormatDate([End Date];"yyyy")) - ToNumber(FormatDate([Start Date];"yyyy"))) * 4) + (If ToNumber(FormatDate([End Date];"MM")) - ToNumber(FormatDate([Start Date];"MM")) >= 0 Then Truncate((ToNumber(FormatDate([End Date];"MM")) - ToNumber(FormatDate([Start Date];"MM"))) / 3;0) Else Truncate((ToNumber(FormatDate([Start Date];"MM")) - ToNumber(FormatDate([End Date];"MM"))) / 3;0))) * -1
Formula explanation:
Here is the formula:
=If ToNumber(FormatDate([End Date];"yyyyMMddHHmmss")) - ToNumber(FormatDate([Start Date];"yyyyMMddHHmmss")) >= 0
Then
MonthsBetween([Start Date];[End Date]) - (If ToNumber(FormatDate([End Date];"ddHHmmss")) - ToNumber(FormatDate([Start Date];"ddHHmmss")) >= 0 Then 0 Else 1)
Else
(MonthsBetween([End Date];[Start Date]) - (If ToNumber(FormatDate([Start Date];"ddHHmmss")) - ToNumber(FormatDate([End Date];"ddHHmmss")) >= 0 Then 0 Else 1) ) * -1
Formula explanation:
We are sure we have exactly the number of months by taking into account a timestamp.
Here is the formula:
=If ToNumber(FormatDate([End Date];"yyyyMMddHHmmss")) - ToNumber(FormatDate([Start Date];"yyyyMMddHHmmss")) >= 0
Then
DaysBetween([Start Date];[End Date]) - (If ToNumber(FormatDate([End Date];"HHmmss")) - ToNumber(FormatDate([Start Date];"HHmmss")) >= 0 Then 0 Else 1)
Else
(DaysBetween([End Date];[Start Date]) - (If ToNumber(FormatDate([Start Date];"HHmmss")) - ToNumber(FormatDate([End Date];"HHmmss")) >= 0 Then 0 Else 1) ) * -1
Formula explanation:
We are sure we have exactly the number of days by taking into account a timestamp.
Here is the formula:
=If ToNumber(FormatDate([End Date];"yyyyMMddHHmmss")) - ToNumber(FormatDate([Start Date];"yyyyMMddHHmmss")) >= 0
Then
(DaysBetween([Start Date];[End Date]) * 24) +
(ToNumber(FormatDate([End Date];"HH")) - ToNumber(FormatDate([Start Date];"HH")))-
(If ToNumber(FormatDate([End Date];"mmss")) - ToNumber(FormatDate([Start Date];"mmss")) >= 0 Then 0 Else 1)
Else
((DaysBetween([End Date];[Start Date]) * 24) +
(ToNumber(FormatDate([Start Date];"HH")) - ToNumber(FormatDate([End Date];"HH")))-
(If ToNumber(FormatDate([Start Date];"mmss")) - ToNumber(FormatDate([End Date];"mmss")) >= 0 Then 0 Else 1)) * -1
Formula explanation:
Here is the formula:
=If ToNumber(FormatDate([End Date];"yyyyMMddHHmmss")) - ToNumber(FormatDate([Start Date];"yyyyMMddHHmmss")) >= 0
Then
(DaysBetween([Start Date];[End Date]) * 1440) +
((ToNumber(FormatDate([End Date];"HH")) - ToNumber(FormatDate([Start Date];"HH"))) * 60) +
(ToNumber(FormatDate([End Date];"mm")) - ToNumber(FormatDate([Start Date];"mm"))) -
(If ToNumber(FormatDate([End Date];"ss")) - ToNumber(FormatDate([Start Date];"ss")) >= 0 Then 0 Else 1)
Else
((DaysBetween([End Date];[Start Date]) * 1440) +
((ToNumber(FormatDate([Start Date];"HH")) - ToNumber(FormatDate([End Date];"HH"))) * 60) +
(ToNumber(FormatDate([Start Date];"mm")) - ToNumber(FormatDate([End Date];"mm"))) -
(If ToNumber(FormatDate([Start Date];"ss")) - ToNumber(FormatDate([End Date];"ss")) >= 0 Then 0 Else 1)) * -1
Formula explanation:
Here is the formula:
=If ToNumber(FormatDate([End Date];"yyyyMMddHHmmss")) - ToNumber(FormatDate([Start Date];"yyyyMMddHHmmss")) >= 0
Then
(DaysBetween([Start Date];[End Date]) * 86400) +
((ToNumber(FormatDate([End Date];"HH")) - ToNumber(FormatDate([Start Date];"HH"))) * 3600) +
((ToNumber(FormatDate([End Date];"mm")) - ToNumber(FormatDate([Start Date];"mm"))) * 60) +
(ToNumber(FormatDate([End Date];"ss")) - ToNumber(FormatDate([Start Date];"ss")))
Else
((DaysBetween([End Date];[Start Date]) * 86400) +
((ToNumber(FormatDate([Start Date];"HH")) - ToNumber(FormatDate([End Date];"HH"))) * 3600) +
((ToNumber(FormatDate([Start Date];"mm")) - ToNumber(FormatDate([End Date];"mm"))) * 60) +
(ToNumber(FormatDate([Start Date];"ss")) - ToNumber(FormatDate([End Date];"ss")))) * -1
Formula explanation:
Here is a screenshot of a report.
The dates in red mean that [End Date] < [Start Date]

You can download the Web Intelligence report attached to that publication.
Didier MAZOUE
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
| User | Count |
|---|---|
| 3143 | |
| 1916 | |
| 1916 | |
| 1213 | |
| 1081 | |
| 757 | |
| 755 | |
| 742 |