- Offizieller Beitrag
Hi,
ich habe die Funktion TimerDiff() erweitert und die Funktion _TimerDiffExt() erstellt.
Die Funktion gibt ein Array mit folgenden Inhalten zurück:
- Originalrückgabe der Funktion TimerDiff()
- Nachkommateil des Sekundenwertes
- Sekundenanteil
- Minutenanteil
- Stundenanteil
- Tage
Edit 04.01.09
Erweiterung auf folgende zusätzliche Ausgabemöglichkeiten (formatierter String)
- 1d 01:58:02
- 1d 01:58:02,562
- 15:02:02
- 15:02:02,563
- 57:02
- 57:02,563
_TimerDiffExt
;===============================================================================
; Function Name: _TimerDiffExt($INIT=-1, $Ret='a', $PostDec=0, $DelimDec=',')
; Description:: Erweiterte TimerDiff-Funktion, splittet Differenz auf
; Rückgabe als Array oder formatierter String
; Parameter(s): $INIT Variable der Initialisierung mit TimerInit()
; $Ret Return-Type (a=Array[Standard]; d=d hh:mm:ss[,ms]; h=hh:mm:ss[,ms]; m=mm:ss[,ms];)
; $PostDec Nachkommastellen für Sekunden 0=Nein(Standard); 1=Ja
; $DelimDec Trenner für Nachkommastellen, Standard=','
; Return Value(s): Erfolg Array[0] - Return von TimerDiff()
; Array[1] - Nachkommateil von Sekunden, 3-stellig
; Array[2] - Sekundenanteil
; Array[3] - Minutenanteil
; Array[4] - Stundenanteil
; Array[5] - Tageanteil
; oder String [1d 01:58:02/ 1d 01:58:02,562] [15:02:02/ 15:02:02,563] [57:02/ 57:02,563]
; Fehler -1 @error 1 (keine TimerInit-Referenz übergeben)
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _TimerDiffExt($INIT=-1, $Ret='a', $PostDec=0, $DelimDec=',')
If $INIT = -1 Then Return SetError(1,0,-1)
Local $aReturn[6] = [0,0,0,0,0,0]
$aReturn[0] = TimerDiff($INIT)
Local $sec = Floor($aReturn[0]/1000)
Local $msec = StringRegExp($aReturn[0], '\A\d+', 1)
$aReturn[1] = StringRight('00' & $msec[0], 3)
Select
Case $sec > 86399 ; s/min/h/d
$aReturn[2] = Mod(Mod(Mod($sec,86400),3600),60)
$aReturn[3] = Floor(Mod(Mod($sec,86400),3600)/60)
$aReturn[4] = Floor(Mod($sec,86400)/3600)
$aReturn[5] = Floor($sec/86400)
Case $sec > 3599 ; s/min/h
$aReturn[2] = Mod(Mod($sec,3600),60)
$aReturn[3] = Floor(Mod($sec,3600)/60)
$aReturn[4] = Floor($sec/3600)
Case $sec > 59 ; s/min
$aReturn[2] = Mod($sec, 60)
$aReturn[3] = Floor($sec/60)
Case Else ; s
$aReturn[2] = $sec
EndSelect
If $PostDec <> 0 Then $PostDec = 1
Local $sReturn
Switch StringLower($Ret)
Case 'd'
$sReturn = StringFormat('%ud %.2u:%.2u:%.2u', $aReturn[5], $aReturn[4], $aReturn[3], $aReturn[2])
If $PostDec Then $sReturn &= $DelimDec & $aReturn[1]
Case 'h'
$sReturn = StringFormat('%.2u:%.2u:%.2u', $aReturn[4], $aReturn[3], $aReturn[2])
If $PostDec Then $sReturn &= $DelimDec & $aReturn[1]
Case 'm'
$sReturn = StringFormat('%.2u:%.2u', $aReturn[3], $aReturn[2])
If $PostDec Then $sReturn &= $DelimDec & $aReturn[1]
Case Else
Return $aReturn
EndSwitch
Return $sReturn
EndFunc ;==>_TimerDiffExt
DL bisher: 26