Hi Michael,

Le 07/07/2020 à 14:34, Michael Tiernan a écrit :
On 7/2/20 2:06 PM, Michael D. Setzer II wrote:
I've been trying to take a formula that calculates the difference between to
dates into years/months/days.

I'll ask if anyone has a macro or formulae that would do almost the same thing but allow it to be expressed further out to include "hours" and "minutes" I'd like to see it if possible.

I have a running log of incidents and it has two sets of columns.

First pair is "Start" and "End" of power event. That calculation would be nice if I could express it as:

### Days, ## Hours, ## Minutes

The second calculation, the one that I've been working on is the difference between the previous "End" and the new "Start" and that I do need to express "[# Year][# Months][## Days][## Hours] ## Minutes" where the values of '0' wouldn't be shown (but that's a luxury right now)

The 'datedif' function would work if it accepted the arguments for smaller measures such as "h"/"m"/"s".

Any suggestions?


Use the DateDiff() function with the "s" (seconds) parameter. Then, divide the result with the appropriate value to get hours, minutes and remainder seconds.

Below is a function of mine that I use for logging purposes ;)

8< --------------------------------------------------------

Function _GetDurationStr(ByVal pSeconds As Long, Optional pFmt As Variant) As String
'Returns the duration as a string, with days, minutes and seconds numbers.
'Input:
'-- pSeconds: the number of seconds to translate.
'-- pFmt: (optional) an array of strings symbols for days, minutes and seconds.
'         Defaults to none (local representation)
' pFmt is supposed to be an array or 4 strings: day, hr, min and sec symbols, in that order.
'         Ex: Array("D", "H", "m", "s")
' Whenever a symbol is left empty, it is replaced with the default symbol.
'         The default symbols are: "days", "hrs", "min" and "s".
'Output: a string of values and symbols for a duration.

        Const SECONDS_IN_DAY    = 86400
    Const SECONDS_IN_HOUR   = 3600
    Const SECONDS_IN_MINUTE = 60
    'Const SECONDS_IN_WEEK   = 604800 'not used

        Dim l_Sec As Long       'values
        Dim l_Min As Long
        Dim l_Hrs As Long
        Dim l_Days As Long
        Dim l_SecSym As String  'symbols
        Dim l_MinSym As String
        Dim l_HrSym As String
        Dim l_DaySym As String
        Dim l_Str As String             'output
        
        l_Sec = Abs(pSeconds)

        'set symbols
        If Not IsMissing(pFmt) Then
                l_DaySym = pFmt(0)
                l_HrSym  = pFmt(1)
                l_MinSym = pFmt(2)
                l_SecSym = pFmt(3)
        End If

        If (l_DaySym = "") Then       l_DaySym = "days"
        If (l_HrSym = "")  Then       l_HrSym  = "hrs"
        If (l_MinSym = "") Then       l_MinSym = "min"
        If (l_SecSym = "") Then       l_SecSym = "s"

        'compute values
        l_Days = l_Sec \ SECONDS_IN_DAY
        l_Hrs = (l_Sec MOD SECONDS_IN_DAY) \ SECONDS_IN_HOUR
l_Min = ((l_Sec MOD SECONDS_IN_DAY) MOD SECONDS_IN_HOUR) \ SECONDS_IN_MINUTE l_Sec = ((l_Sec MOD SECONDS_IN_DAY) MOD SECONDS_IN_HOUR) MOD SECONDS_IN_MINUTE
        
        'create the output string
        If (l_Days > 0) Then l_Str = l_Str & CStr(l_Days) & " " & l_DaySym & " "
        If (l_Hrs > 0)  Then l_Str = l_Str & CStr(l_Hrs) & " " & l_HrSym & " "
        If (l_Min > 0)  Then l_Str = l_Str & CStr(l_Min) & " " & l_MinSym & " "
If (l_Sec > 0) Or (pSeconds = 0) Then l_Str = l_Str & CStr(l_Sec) & " " & l_SecSym
        
        'remove the possible trailing space
        If (Right(l_Str, 1) = " ") Then
                l_Str = Left(l_Str, Len(l_Str) - 1)
        End If

        _GetDurationStr = l_Str
End Function '_GetDurationStr

-------------------------------------------------------- >8


HTH,
--
Jean-Francois Nifenecker, Bordeaux


--
To unsubscribe e-mail to: [email protected]
Problems? https://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/
Posting guidelines + more: https://wiki.documentfoundation.org/Netiquette
List archive: https://listarchives.libreoffice.org/global/users/
Privacy Policy: https://www.documentfoundation.org/privacy

Reply via email to