spudw2k Posted April 1, 2013 Share Posted April 1, 2013 (edited) I am working on a simple file filter tool based on a date range. I made this to help things along and thought I'd share it. Code missing non YYYYMMDD format exception handling expandcollapse popup#include <Date.au3> ;Is My Birthdate in 2013? $var = _IsBetweenDates("1983/01/17","2013/01/01","2013/12/31") msgbox(0,"_IsBetweenDates",$var & @CRLF & "err:" & @error) ;Is Today in the year 2013? $var = _IsBetweenDates(@YEAR & "/" & @MON & "/" & @MDAY,"2013/01/01","2013/12/31") msgbox(0,"_IsBetweenDates",$var & @CRLF & "err:" & @error) ;Is Today in the year 2013? (Reversed Start and End Test) $var = _IsBetweenDates(@YEAR & "/" & @MON & "/" & @MDAY,"2013/12/31","2013/01/01") msgbox(0,"_IsBetweenDates",$var & @CRLF & "err:" & @error) ; #FUNCTION# ==================================================================================================================== ; Name...........: _IsBetweenDates ; Description ...: Determine if a given date is between two dates ; Syntax.........: _IsBetweenDates($ChosenDate,$StartDate,$EndDate) ; Parameters ....: $ChosenDate - YYYYMMDD format date to determine if within date range ; : $StartDate - YYYYMMDD format start date of date range ; : $EndDate - YYYYMMDD format end date of date range ; Return values .: Success - True ; : Failure - False, sets @error to: ; : |1 - Range must be at leat one day. ; : |2 - Outside of Range - Lower ; : |3 - Outside of Range - Higher ; Author ........: Spudw2k ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== Func _IsBetweenDates($ChosenDate,$StartDate,$EndDate) Local $varDate1, $varDate2 ;Verify Date Range is at least one day else error (1) $varDate1 = _DateDiff('D',$StartDate,$EndDate) If $varDate1 = 0 Then Return SetError(1,0,False) ;Enforce Start Date to be Before End Date If $varDate1 < 0 Then $varDate2 = $StartDate $StartDate = $EndDate $EndDate = $varDate2 EndIf ;Determine if desired date is within range $varDate1 = _DateDiff('D',$StartDate,$ChosenDate) If ($varDate1 < 0) Then Return SetError(2,0,False) ;Date is below range $varDate2 = _DateDiff('D',$EndDate, $ChosenDate) If ($varDate2 > 0) Then Return SetError(3,0,False) ;Date is above range Return True ;Date is within range EndFunc Edited April 1, 2013 by spudw2k Spoiler Things I've Made: Always On Top Tool ◊ AU History ◊ Deck of Cards ◊ HideIt ◊ ICU ◊ Icon Freezer ◊ Ipod Ejector ◊ Junos Configuration Explorer ◊ Link Downloader ◊ MD5 Folder Enumerator ◊ PassGen ◊ Ping Tool ◊ Quick NIC ◊ Read OCR ◊ RemoteIT ◊ SchTasksGui ◊ SpyCam ◊ System Scan Report Tool ◊ System UpTime ◊ Transparency Machine ◊ VMWare ESX Builder Misc Code Snippets: ADODB Example ◊ CheckHover ◊ Detect SafeMode ◊ DynEnumArray ◊ GetNetStatData ◊ HashArray ◊ IsBetweenDates ◊ Local Admins ◊ Make Choice ◊ Recursive File List ◊ Remove Sizebox Style ◊ Retrieve PNPDeviceID ◊ Retrieve SysListView32 Contents ◊ Set IE Homepage ◊ Tickle Expired Password ◊ Transpose Array Projects: Drive Space Usage GUI ◊ LEDkIT ◊ Plasma_kIt ◊ Scan Engine Builder ◊ SpeeDBurner ◊ SubnetCalc Cool Stuff: AutoItObject UDF ◊ Extract Icon From Proc ◊ GuiCtrlFontRotate ◊ Hex Edit Funcs ◊ Run binary ◊ Service_UDF Link to comment Share on other sites More sharing options...
guinness Posted April 1, 2013 Share Posted April 1, 2013 Nice example. Thanks. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
AZJIO Posted April 1, 2013 Share Posted April 1, 2013 (edited) faster expandcollapse popup#include <Date.au3> $Test = '2011.03.11.00.00.00' ; $Test = '2012.03.12.00.00.00' ; $Test = '2032.03.12.00.00.00' $Test = StringRegExp($Test, '(\d+)', 3) $Old = '2011.03.10.00.00.00' $Old = StringRegExp($Old, '(\d+)', 3) $New = _NowCalc() $New = StringRegExp($New, '(\d+)', 3) $var = '' $timer = TimerInit() For $i = 1 To 100 $var &= _IsBetweenDates($Test, $Old, $New) & '|' Next MsgBox(0, "Result", 'Time : ' & Round(TimerDiff($timer), 2) & ' msec' & @CRLF & $var) Func _IsBetweenDates($avCurDate, $asDate1, $asDate2) If Not IsArray($avCurDate) Or UBound($avCurDate) < 6 Then SetError(1, 0, '') If Not IsArray($asDate1) Or UBound($asDate1) < 6 Then SetError(2, 0, '') If Not IsArray($asDate2) Or UBound($asDate2) < 6 Then SetError(3, 0, '') For $i = 0 To 5 $avCurDate[$i] = Number($avCurDate[$i]) Next Local $iCount = 0 $iCount += __CompareDates($avCurDate, $asDate1) If $iCount = 0 Then Return True $iCount += __CompareDates($avCurDate, $asDate2) Return ($iCount = 0) EndFunc Func __CompareDates(ByRef Const $aiOld, ByRef Const $asNew) Local $iCompare = 0 For $i = 0 To 5 If $asNew[$i] > $aiOld[$i] Then $iCompare += 1 ExitLoop ElseIf $asNew[$i] < $aiOld[$i] Then $iCompare -= 1 ExitLoop Else ContinueLoop EndIf Next Return $iCompare EndFunc Edited April 1, 2013 by AZJIO My other projects or all Link to comment Share on other sites More sharing options...
spudw2k Posted April 1, 2013 Author Share Posted April 1, 2013 (edited) fasterMuch faster...though a bit harder for me to get my head around at first. I've never considered a purely calculative approach when working with dates, but I suppose that a YYYYMMDD value should be easy to compare with another. Thanks. Edited April 1, 2013 by spudw2k Spoiler Things I've Made: Always On Top Tool ◊ AU History ◊ Deck of Cards ◊ HideIt ◊ ICU ◊ Icon Freezer ◊ Ipod Ejector ◊ Junos Configuration Explorer ◊ Link Downloader ◊ MD5 Folder Enumerator ◊ PassGen ◊ Ping Tool ◊ Quick NIC ◊ Read OCR ◊ RemoteIT ◊ SchTasksGui ◊ SpyCam ◊ System Scan Report Tool ◊ System UpTime ◊ Transparency Machine ◊ VMWare ESX Builder Misc Code Snippets: ADODB Example ◊ CheckHover ◊ Detect SafeMode ◊ DynEnumArray ◊ GetNetStatData ◊ HashArray ◊ IsBetweenDates ◊ Local Admins ◊ Make Choice ◊ Recursive File List ◊ Remove Sizebox Style ◊ Retrieve PNPDeviceID ◊ Retrieve SysListView32 Contents ◊ Set IE Homepage ◊ Tickle Expired Password ◊ Transpose Array Projects: Drive Space Usage GUI ◊ LEDkIT ◊ Plasma_kIt ◊ Scan Engine Builder ◊ SpeeDBurner ◊ SubnetCalc Cool Stuff: AutoItObject UDF ◊ Extract Icon From Proc ◊ GuiCtrlFontRotate ◊ Hex Edit Funcs ◊ Run binary ◊ Service_UDF Link to comment Share on other sites More sharing options...
matwachich Posted April 1, 2013 Share Posted April 1, 2013 I do it like this: Func _DateBetween($sDate, $sBegin, $sEnd) $sDate= StringReplace($sDate, ":", "") $sDate= StringReplace($sDate, "/", "") $sDate= StringReplace($sDate, " ", "") $sBegin = StringReplace($sBegin, ":", "") $sBegin = StringReplace($sBegin, "/", "") $sBegin = StringReplace($sBegin, " ", "") $sEnd= StringReplace($sEnd, ":", "") $sEnd= StringReplace($sEnd, "/", "") $sEnd= StringReplace($sEnd, " ", "") If Int($sDate) >= Int($sBegin) And Int($sDate) <= Int($sEnd) Then Return 1 Return 0 EndFunc Link to comment Share on other sites More sharing options...
guinness Posted April 1, 2013 Share Posted April 1, 2013 A lot of unnecessary StringReplace functions there, when you can do it with SRE. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
AZJIO Posted April 1, 2013 Share Posted April 1, 2013 (edited) matwachich You need to check that the old date is really old ; #include <Date.au3> $Test = '2002.03.11.00.00.00' ; $Test = '2012.03.12.00.00.00' ; $Test = '2032.03.12.00.00.00' $Test = StringRegExpReplace($Test, '\D+', '') $Old = '2011.03.10.00.00.00' $Old = StringRegExpReplace($Old, '\D+', '') ; $New = _NowCalc() $New = '2013.04.01.00.00.00' $New = StringRegExpReplace($New, '\D+', '') $var = '' $timer = TimerInit() For $i = 1 To 100 $var &= _IsBetweenDates($Test, $Old, $New) & '|' Next MsgBox(0, "Result", 'Time : ' & Round(TimerDiff($timer), 2) & ' msec' & @CRLF & $var) Func _IsBetweenDates($sCurDate, $Old, $New) $Old = Number($Old) If $Old > $New Then Local $tmp = $New $New = $Old $Old = $tmp EndIf $sCurDate = Number($sCurDate) If $sCurDate >= $Old And $sCurDate <= $New Then Return True Else Return False EndIf EndFunc expandcollapse popup#include <Date.au3> #include <File.au3> #include <GUIConstantsEx.au3> #Include <GuiListView.au3> $Old = '2001.03.10.00.00.00' $Old = StringRegExpReplace($Old, '\D+', '') ; $New = _NowCalc() $New = '2011.04.01.00.00.00' $New = StringRegExpReplace($New, '\D+', '') $aFiles = _FileListToArray (@SystemDir, "*.*", 1) $hGui = GUICreate ("FileTime") $ListView = GUICtrlCreateListView ("File|Time", 5, 5, 390, 390) _GUICtrlListView_SetColumnWidth ($ListView, 0, 230) _GUICtrlListView_SetColumnWidth ($ListView, 1, 70) GUISetState() ; $timer = TimerInit() For $i = 1 To $aFiles[0] $aFileTime = FileGetTime(@SystemDir & "\" & $aFiles[$i], 1, 1) If _IsBetweenDates($aFileTime, $Old, $New) Then GUICtrlCreateListViewItem ($aFiles[$i] & "|" & $aFileTime, $ListView) Next ; WinSetTitle($hGui, '', "FileTime, Time = " & Round(TimerDiff($timer), 2) & ' msec') Do Until GUIGetMsg() = $GUI_EVENT_CLOSE Func _IsBetweenDates($sCurDate, $Old, $New) $Old = Number($Old) If $Old > $New Then Local $tmp = $New $New = $Old $Old = $tmp EndIf $sCurDate = Number($sCurDate) If $sCurDate >= $Old And $sCurDate <= $New Then Return True Else Return False EndIf EndFunc Edited April 1, 2013 by AZJIO My other projects or all Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now