Díky za odpověď, zde Microsoft přiznal, že tato funkce nemusí počítat správně:
Upozornění: Excel poskytuje funkci DATEDIF za účelem podpory starších sešitů z Lotusu 1-2-3. Funkce DATEDIF může za určitých scénářů vypočítat nesprávné výsledky.
Důležité: Nedoporučujeme používat argument "MD", protože s ním existují známá omezení. Viz níže část o známých problémech.
Pokud by někdo chtěl použít moje makro, pak jsem jej zkrátil a okomentoval:
Function Stari(Dat1 As Date, Dat2 As Date) As Variant
' Výpočet stáří (rozdíl mezi dvěmi daty), nepočítá s hodinami, minutami a vteřinami
' Vstup: [ Dat1 - Počáteční datum, Dat2 - Koncové datum], počáteční musí být nižší jak koncové
' Výstup: [ Rok, Měsíc, Den ]
On Error GoTo Chyba
Dim Mesic%(13), R%, M%, D%, R1%, M1% ' % - Integer, & - Long
' Defaultně má LibreOffice nastaveno indexování pole od nuly (Option Base 0):
Mesic = Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
' Základní výpočet "na hrubo"
R1 = Year(Dat1)
M1 = Month(Dat1)
R = Year(Dat2) - R1
M = Month(Dat2) - M1
D = Day(Dat2) - Day(Dat1)
' Korekce měsíců
If D<0 Then
M = M - 1
D = D + Mesic(M1)
If M1=2 Then ' Kontrola na přestupný rok (únor)
If (R1 Mod 4) = 0 Then
If ((R1 Mod 100)<>0) Or ((R1 Mod 400)=0) Then
' Korekce na delší únor
D = D + 1
EndIf
EndIf
EndIf
EndIf
' Korekce roků
If M<0 Then
R = R - 1
M = M + 12
EndIf
' Sestavení výstupu
Stari = Right("00" & R, 2) & "R, " & Right("00" & M, 2) & "M, " & Right("00" & D, 2) & "D"
Exit Function
Chyba:
' Nespecifikovaná chyba při výpočtu
Stari = "Chybka"
End Function
Zde je testovaný soubor ke stažení Výpočet věku - TEST4
*Opraveno makro, opraven odkaz na správný soubor.
Editoval LADER (12. 1. 2023 14:28:56)
Ubuntu 22.04.4 LTS, LibreOffice Verze: 7.6.6.3, wxMaxima 20.12.1, Maxima 5.47.0 (SBCL)