home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 April / PCWorld_2005-04_cd.bin / software / vyzkuste / autoit / autoit-v3-setup.exe / Include / Date.au3 < prev    next >
Text File  |  2005-01-17  |  45KB  |  1,182 lines

  1. #include-once
  2. ; version 2004/12/11 - 4
  3. ; ------------------------------------------------------------------------------
  4. ;
  5. ; AutoIt Version: 3.0
  6. ; Language:       English
  7. ; Description:    Functions that assist with dates and times.
  8. ;
  9. ; ==============================================================================
  10. ; VERSION       DATE       DESCRIPTION
  11. ; -------    ----------    -----------------------------------------------------
  12. ; v1.0.00    01/21/2004    Initial release
  13. ; v1.0.01    02/05/2004    Fixed: _TicksToTime and _TimeToTicks
  14. ; v1.0.02    02/06/2004    Fixed: _TicksToTime
  15. ; v1.0.03    02/12/2004    Added: _DateAdd, _DateDiff, _DateToDayValue, _DayValueToDate
  16. ;                                 _DateTimeFormat, _DateToDayOfWeek, _DateIsValid
  17. ;                                 _DateTimeSplit, _Now(), _NowTime(), _NowDate(),_DateDaysInMonth()
  18. ;                                 _DateDayOfWeek(), Nowcalc()
  19. ; v1.0.04    12/11/2004    Updated: _DateAdd: change logic to make it faster.
  20. ; ------------------------------------------------------------------------------
  21.  
  22. ;===============================================================================
  23. ;
  24. ; Description:      Calculates a new date based on a given date and add an interval.
  25. ; Parameter(s):     $sType    D = Add number of days to the given date
  26. ;                             M = Add number of months to the given date
  27. ;                             Y = Add number of years to the given date
  28. ;                             w = Add number of Weeks to the given date
  29. ;                             h = Add number of hours to the given date
  30. ;                             n = Add number of minutes to the given date
  31. ;                             s = Add number of seconds to the given date
  32. ;                   $iValToAdd - number to be added
  33. ;                   $sDate    - Input date in the format YYYY/MM/DD[ HH:MM:SS]
  34. ; Requirement(s):   None
  35. ; Return Value(s):  On Success - Date newly calculated date.
  36. ;                   On Failure - 0  and Set
  37. ;                                   @ERROR to:  1 - Invalid $sType
  38. ;                                                  2 - Invalid $iValToAdd
  39. ;                                                  3 - Invalid $sDate
  40. ; Author(s):        Jos van der Zande
  41. ; Note(s):          The function will not return an invalid date.
  42. ;                   When 3 months is are to '2004/1/31' then the result will be 2004/04/30
  43. ;
  44. ;
  45. ;===============================================================================
  46. Func _DateAdd($sType, $iValToAdd, $sDate)
  47.     Local $asTimePart[4]
  48.     Local $asDatePart[4]
  49.     Local $iJulianDate
  50.     Local $iTimeVal
  51.     Local $iNumDays
  52.     Local $Y
  53.     Local $Day2Add
  54.     ; Verify that $sType is Valid
  55.     $sType = StringLeft($sType, 1)
  56.     If StringInStr("D,M,Y,w,h,n,s", $sType) = 0 Or $sType = "" Then
  57.         SetError(1)
  58.         Return (0)
  59.     EndIf
  60.     ; Verify that Value to Add  is Valid
  61.     If Not StringIsInt($iValToAdd) Then
  62.         SetError(2)
  63.         Return (0)
  64.     EndIf
  65.     ; Verify If InputDate is valid
  66.     If Not _DateIsValid($sDate) Then
  67.         SetError(3)
  68.         Return (0)
  69.     EndIf
  70.     ; split the date and time into arrays
  71.     _DateTimeSplit($sDate, $asDatePart, $asTimePart)
  72.     
  73.     ; ====================================================
  74.     ; adding days then get the julian date
  75.     ; add the number of day
  76.     ; and convert back to Gregorian
  77.     If $sType = "d" Or $sType = "w" Then
  78.         If $sType = "w" Then $iValToAdd = $iValToAdd * 7
  79.         $iJulianDate = _DateToDayValue($asDatePart[1], $asDatePart[2], $asDatePart[3]) + $iValToAdd
  80.         _DayValueToDate($iJulianDate, $asDatePart[1], $asDatePart[2], $asDatePart[3])
  81.     EndIf
  82.     ; ====================================================
  83.     ; adding Months
  84.     If $sType == "m" Then
  85.         $asDatePart[2] = $asDatePart[2] + $iValToAdd
  86.         ; pos number of months
  87.         While $asDatePart[2] > 12
  88.             $asDatePart[2] = $asDatePart[2] - 12
  89.             $asDatePart[1] = $asDatePart[1] + 1
  90.         WEnd
  91.         ; Neg number of months
  92.         While $asDatePart[2] < 1
  93.             $asDatePart[2] = $asDatePart[2] + 12
  94.             $asDatePart[1] = $asDatePart[1] - 1
  95.         WEnd
  96.     EndIf
  97.     ; ====================================================
  98.     ; adding Years
  99.     If $sType = "y" Then
  100.         $asDatePart[1] = $asDatePart[1] + $iValToAdd
  101.     EndIf
  102.     ; ====================================================
  103.     ; adding Time value
  104.     If $sType = "h" Or $sType = "n" Or $sType = "s" Then
  105.         $iTimeVal = _TimeToTicks($asTimePart[1], $asTimePart[2], $asTimePart[3]) / 1000
  106.         If $sType = "h" Then $iTimeVal = $iTimeVal + $iValToAdd * 3600
  107.         If $sType = "n" Then $iTimeVal = $iTimeVal + $iValToAdd * 60
  108.         If $sType = "s" Then $iTimeVal = $iTimeVal + $iValToAdd
  109.         ; calculated days to add
  110.         $Day2Add = Int($iTimeVal/ (24 * 60 * 60))
  111.         $iTimeVal = $iTimeVal - $Day2Add * 24 * 60 * 60
  112.         If $iTimeVal < 0 Then
  113.             $Day2Add = $Day2Add - 1
  114.             $iTimeVal = $iTimeVal + 24 * 60 * 60
  115.         EndIf
  116.         $iJulianDate = _DateToDayValue($asDatePart[1], $asDatePart[2], $asDatePart[3]) + $Day2Add
  117.         ; calculate the julian back to date
  118.         _DayValueToDate($iJulianDate, $asDatePart[1], $asDatePart[2], $asDatePart[3])
  119.         ; caluculate the new time
  120.         _TicksToTime($iTimeVal * 1000, $asTimePart[1], $asTimePart[2], $asTimePart[3])
  121.     EndIf
  122.     ; ====================================================
  123.     ; check if the Input day is Greater then the new month last day.
  124.     ; if so then change it to the last possible day in the month
  125.     $iNumDays = StringSplit('31,28,31,30,31,30,31,31,30,31,30,31', ',')
  126.     If _DateIsLeapYear($asDatePart[1]) Then $iNumDays[2] = 29
  127.     ;
  128.     If $iNumDays[$asDatePart[2]] < $asDatePart[3] Then $asDatePart[3] = $iNumDays[$asDatePart[2]]
  129.     ; ========================
  130.     ; Format the return date
  131.     ; ========================
  132.     ; Format the return date
  133.     $sDate = $asDatePart[1] & '/' & StringRight("0" & $asDatePart[2], 2) & '/' & StringRight("0" & $asDatePart[3], 2)
  134.     ; add the time when specified in the input
  135.     If $asTimePart[0] > 0 Then
  136.         If $asTimePart[0] > 2 Then
  137.             $sDate = $sDate & " " & StringRight("0" & $asTimePart[1], 2) & ':' & StringRight("0" & $asTimePart[2], 2) & ':' & StringRight("0" & $asTimePart[3], 2)
  138.         Else
  139.             $sDate = $sDate & " " & StringRight("0" & $asTimePart[1], 2) & ':' & StringRight("0" & $asTimePart[2], 2)
  140.         EndIf
  141.     EndIf
  142.     ;
  143.     return ($sDate)
  144. EndFunc   ;==>_DateAdd
  145.  
  146. ;===============================================================================
  147. ;
  148. ; Description:      Returns the name of the weekday, based on the specified day.
  149. ; Parameter(s):     $iDayNum - Day number
  150. ;                   $iShort  - Format:
  151. ;                              0 = Long name of the weekday
  152. ;                              1 = Abbreviated name of the weekday
  153. ; Requirement(s):   None
  154. ; Return Value(s):  On Success - Weekday name
  155. ;                   On Failure - A NULL string and sets @ERROR = 1
  156. ; Author(s):        Jeremy Landes <jlandes@landeserve.com>
  157. ; Note(s):          English only
  158. ;
  159. ;===============================================================================
  160. Func _DateDayOfWeek($iDayNum, $iShort = 0)
  161.     ;==============================================
  162.     ; Local Constant/Variable Declaration Section
  163.     ;==============================================
  164.     Local $aDayOfWeek[8]
  165.     
  166.     $aDayOfWeek[1] = "Sunday"
  167.     $aDayOfWeek[2] = "Monday"
  168.     $aDayOfWeek[3] = "Tuesday"
  169.     $aDayOfWeek[4] = "Wednesday"
  170.     $aDayOfWeek[5] = "Thursday"
  171.     $aDayOfWeek[6] = "Friday"
  172.     $aDayOfWeek[7] = "Saturday"
  173.     Select
  174.         Case Not StringIsInt($iDayNum) Or Not StringIsInt($iShort)
  175.             SetError(1)
  176.             Return ""
  177.         Case $iDayNum < 1 Or $iDayNum > 7
  178.             SetError(1)
  179.             Return ""
  180.         Case Else
  181.             Select
  182.                 Case $iShort = 0
  183.                     Return $aDayOfWeek[$iDayNum]
  184.                 Case $iShort = 1
  185.                     Return StringLeft($aDayOfWeek[$iDayNum], 3)
  186.                 Case Else
  187.                     SetError(1)
  188.                     Return ""
  189.             EndSelect
  190.     EndSelect
  191. EndFunc   ;==>_DateDayOfWeek
  192.  
  193. ;===============================================================================
  194. ;
  195. ; Function Name:  _DateDaysInMonth()
  196. ; Description:    Returns the number of days in a month, based on the specified
  197. ;                 month and year.
  198. ; Author(s):      Jeremy Landes <jlandes@landeserve.com>
  199. ;
  200. ;===============================================================================
  201. Func _DateDaysInMonth($iYear, $iMonthNum)
  202.     Local $aiNumDays
  203.     
  204.     $aiNumDays = "31,28,31,30,31,30,31,31,30,31,30,31"
  205.     $aiNumDays = StringSplit($aiNumDays, ",")
  206.     
  207.     If _DateIsMonth($iMonthNum) And _DateIsYear($iYear) Then
  208.         If _DateIsLeapYear($iYear) Then $aiNumDays[2] = $aiNumDays[2] + 1
  209.         SetError(0)
  210.         Return $aiNumDays[$iMonthNum]
  211.     Else
  212.         SetError(1)
  213.         Return 0
  214.     EndIf
  215. EndFunc   ;==>_DateToDaysInMonth
  216.  
  217. ;===============================================================================
  218. ;
  219. ; Description:      Returns the difference between 2 dates, expressed in the type requested
  220. ; Parameter(s):     $sType - returns the difference in:
  221. ;                               d = days
  222. ;                               m = Months
  223. ;                               y = Years
  224. ;                               w = Weeks
  225. ;                               h = Hours
  226. ;                               n = Minutes
  227. ;                               s = Seconds
  228. ;                   $sStartDate    - Input Start date in the format "YYYY/MM/DD[ HH:MM:SS]"
  229. ;                   $sEndDate    - Input End date in the format "YYYY/MM/DD[ HH:MM:SS]"
  230. ; Requirement(s):   None
  231. ; Return Value(s):  On Success - Difference between the 2 dates
  232. ;                   On Failure - 0  and Set
  233. ;                                   @ERROR to:  1 - Invalid $sType
  234. ;                                               2 - Invalid $sStartDate
  235. ;                                               3 - Invalid $sEndDate
  236. ; Author(s):        Jos van der Zande
  237. ; Note(s):
  238. ;
  239. ;===============================================================================
  240. Func _DateDiff($sType, $sStartDate, $sEndDate)
  241.     Local $asStartDatePart[4]
  242.     Local $asStartTimePart[4]
  243.     Local $asEndDatePart[4]
  244.     Local $asEndTimePart[4]
  245.     Local $iTimeDiff
  246.     Local $iYearDiff
  247.     Local $iMonthDiff
  248.     Local $iStartTimeInSecs
  249.     Local $iEndTimeInSecs
  250.     Local $aDaysDiff
  251.     ;
  252.     ; Verify that $sType is Valid
  253.     $sType = StringLeft($sType, 1)
  254.     If StringInStr("d,m,y,w,h,n,s", $sType) = 0 Or $sType = "" Then
  255.         SetError(1)
  256.         Return (0)
  257.     EndIf
  258.     ; Verify If StartDate is valid
  259.     If Not _DateIsValid($sStartDate) Then
  260.         SetError(2)
  261.         Return (0)
  262.     EndIf
  263.     ; Verify If EndDate is valid
  264.     If Not _DateIsValid($sEndDate) Then
  265.         SetError(3)
  266.         Return (0)
  267.     EndIf
  268.     ; split the StartDate and Time into arrays
  269.     _DateTimeSplit($sStartDate, $asStartDatePart, $asStartTimePart)
  270.     ; split the End  Date and time into arrays
  271.     _DateTimeSplit($sEndDate, $asEndDatePart, $asEndTimePart)
  272.     ; ====================================================
  273.     ; Get the differens in days between the 2 dates
  274.     $aDaysDiff = _DateToDayValue($asEndDatePart[1], $asEndDatePart[2], $asEndDatePart[3]) - _DateToDayValue($asStartDatePart[1], $asStartDatePart[2], $asStartDatePart[3])
  275.     ; ====================================================
  276.     ; Get the differens in Seconds between the 2 times when specified
  277.     If $asStartTimePart[0] > 1 And $asEndTimePart[0] > 1 Then
  278.         $iStartTimeInSecs = $asStartTimePart[1] * 3600 + $asStartTimePart[2] * 60 + $asStartTimePart[3]
  279.         $iEndTimeInSecs = $asEndTimePart[1] * 3600 + $asEndTimePart[2] * 60 + $asEndTimePart[3]
  280.         $iTimeDiff = $iEndTimeInSecs - $iStartTimeInSecs
  281.         If $iTimeDiff < 0 Then
  282.             $aDaysDiff = $aDaysDiff - 1
  283.             $iTimeDiff = $iTimeDiff + 24 * 60 * 60
  284.         EndIf
  285.     Else
  286.         $iTimeDiff = 0
  287.     EndIf
  288.     Select
  289.         Case $sType = "d"
  290.             Return ($aDaysDiff)
  291.         Case $sType = "m"
  292.             $iYearDiff = $asEndDatePart[1] - $asStartDatePart[1]
  293.             $iMonthDiff = $asEndDatePart[2] - $asStartDatePart[2] + $iYearDiff * 12
  294.             If $asEndDatePart[3] < $asStartDatePart[3] Then $iMonthDiff = $iMonthDiff - 1
  295.             $iStartTimeInSecs = $asStartTimePart[1] * 3600 + $asStartTimePart[2] * 60 + $asStartTimePart[3]
  296.             $iEndTimeInSecs = $asEndTimePart[1] * 3600 + $asEndTimePart[2] * 60 + $asEndTimePart[3]
  297.             $iTimeDiff = $iEndTimeInSecs - $iStartTimeInSecs
  298.             If $asEndDatePart[3] = $asStartDatePart[3] And $iTimeDiff < 0 Then $iMonthDiff = $iMonthDiff - 1
  299.             Return ($iMonthDiff)
  300.         Case $sType = "y"
  301.             $iYearDiff = $asEndDatePart[1] - $asStartDatePart[1]
  302.             If $asEndDatePart[2] < $asStartDatePart[2] Then $iYearDiff = $iYearDiff - 1
  303.             If $asEndDatePart[2] = $asStartDatePart[2] And $asEndDatePart[3] < $asStartDatePart[3] Then $iYearDiff = $iYearDiff - 1
  304.             $iStartTimeInSecs = $asStartTimePart[1] * 3600 + $asStartTimePart[2] * 60 + $asStartTimePart[3]
  305.             $iEndTimeInSecs = $asEndTimePart[1] * 3600 + $asEndTimePart[2] * 60 + $asEndTimePart[3]
  306.             $iTimeDiff = $iEndTimeInSecs - $iStartTimeInSecs
  307.             If $asEndDatePart[2] = $asStartDatePart[2] And $asEndDatePart[3] = $asStartDatePart[3] And $iTimeDiff < 0 Then $iYearDiff = $iYearDiff - 1
  308.             Return ($iYearDiff)
  309.         Case $sType = "w"
  310.             Return (Int($aDaysDiff / 7))
  311.         Case $sType = "h"
  312.             Return ($aDaysDiff * 24 + Int($iTimeDiff / 3600))
  313.         Case $sType = "n"
  314.             Return ($aDaysDiff * 24 * 60 + Int($iTimeDiff / 60))
  315.         Case $sType = "s"
  316.             Return ($aDaysDiff * 24 * 60 * 60 + $iTimeDiff)
  317.     EndSelect
  318. EndFunc   ;==>_DateDiff
  319.  
  320. ;===============================================================================
  321. ;
  322. ; Description:      Returns 1 if the specified year falls on a leap year and
  323. ;                   returns 0 if it does not.
  324. ; Parameter(s):     $iYear - Year to check
  325. ; Requirement(s):   None
  326. ; Return Value(s):  On Success - 0 = Year is not a leap year
  327. ;                                1 = Year is a leap year
  328. ;                   On Failure - 0 and sets @ERROR = 1
  329. ; Author(s):        Jeremy Landes <jlandes@landeserve.com>
  330. ; Note(s):          None
  331. ;
  332. ;===============================================================================
  333. Func _DateIsLeapYear($iYear)
  334.     If StringIsInt($iYear) Then
  335.         Select
  336.             Case Mod($iYear, 4) = 0 And Mod($iYear, 100) <> 0
  337.                 Return 1
  338.             Case Mod($iYear, 400) = 0
  339.                 Return 1
  340.             Case Else
  341.                 Return 0
  342.         EndSelect
  343.     Else
  344.         SetError(1)
  345.         Return 0
  346.     EndIf
  347. EndFunc   ;==>_DateIsLeapYear
  348.  
  349. ;===============================================================================
  350. ;
  351. ; Function Name:  _DateIsMonth()
  352. ; Description:    Checks a given number to see if it is a valid month.
  353. ; Author(s):      Jeremy Landes <jlandes@landeserve.com>
  354. ;
  355. ;===============================================================================
  356. Func _DateIsMonth($iNumber)
  357.     If StringIsInt($iNumber) Then
  358.         If $iNumber >= 1 And $iNumber <= 12 Then
  359.             Return 1
  360.         Else
  361.             Return 0
  362.         EndIf
  363.     Else
  364.         Return 0
  365.     EndIf
  366. EndFunc   ;==>_DateIsMonth
  367.  
  368. ;===============================================================================
  369. ;
  370. ; Description:      Verify if date and time are valid "yyyy/mm/dd[ hh:mm[:ss]]".
  371. ; Parameter(s):     $sDate format "yyyy/mm/dd[ hh:mm[:ss]]"
  372. ; Requirement(s):   None
  373. ; Return Value(s):  On Success - 1
  374. ;                   On Failure - 0
  375. ; Author(s):        Jeremy Landes <jlandes@landeserve.com>
  376. ;                   Jos van der Zande <jdeb@autoitscript.com>
  377. ; Note(s):          None
  378. ;
  379. ;===============================================================================
  380. Func _DateIsValid($sDate)
  381.     Local $asDatePart[4]
  382.     Local $asTimePart[4]
  383.     Local $iNumDays
  384.     
  385.     $iNumDays = "31,28,31,30,31,30,31,31,30,31,30,31"
  386.     $iNumDays = StringSplit($iNumDays, ",")
  387.     ; split the date and time into arrays
  388.     _DateTimeSplit($sDate, $asDatePart, $asTimePart)
  389.     
  390.     If $asDatePart[0] <> 3 Then
  391.         Return (0)
  392.     EndIf
  393.     ; verify valid input date values
  394.     If _DateIsLeapYear($asDatePart[1]) Then $iNumDays[2] = 29
  395.     If $asDatePart[1] < 1900 Or $asDatePart[1] > 2999 Then Return (0)
  396.     If $asDatePart[2] < 1 Or $asDatePart[2] > 12 Then Return (0)
  397.     If $asDatePart[3] < 1 Or $asDatePart[3] > $iNumDays[$asDatePart[2]] Then Return (0)
  398.     
  399.     ; verify valid input Time values
  400.     If $asTimePart[0] < 1 Then Return (1)    ; No time specified so date must be correct
  401.     If $asTimePart[0] < 3 Then Return (0)    ; need at least HH:MM when something is specified
  402.     If $asTimePart[1] < 0 Or $asTimePart[1] > 23 Then Return (0)
  403.     If $asTimePart[2] < 0 Or $asTimePart[2] > 59 Then Return (0)
  404.     If $asTimePart[3] < 0 Or $asTimePart[3] > 59 Then Return (0)
  405.     ; we got here so date/time must be good
  406.     Return (1)
  407. EndFunc   ;==>_DateIsValid
  408.  
  409. ;===============================================================================
  410. ;
  411. ; Function Name:  _DateIsYear()
  412. ; Description:    Checks a given number to see if it is a valid year.
  413. ; Author(s):      Jeremy Landes <jlandes@landeserve.com>
  414. ;
  415. ;===============================================================================
  416. Func _DateIsYear($iNumber)
  417.     If StringIsInt($iNumber) Then
  418.         If StringLen($iNumber) = 4 Then
  419.             Return 1
  420.         Else
  421.             Return 0
  422.         EndIf
  423.     Else
  424.         Return 0
  425.     EndIf
  426. EndFunc   ;==>_DateIsYear
  427.  
  428. ;===============================================================================
  429. ;
  430. ; Description:      Returns previous weekday number, based on the specified day
  431. ;                   of the week.
  432. ; Parameter(s):     $iWeekdayNum - Weekday number
  433. ; Requirement(s):   None
  434. ; Return Value(s):  On Success - Previous weekday number
  435. ;                   On Failure - 0 and sets @ERROR = 1
  436. ; Author(s):        Jeremy Landes <jlandes@landeserve.com>
  437. ; Note(s):          None
  438. ;
  439. ;===============================================================================
  440. Func _DateLastWeekdayNum($iWeekdayNum)
  441.     ;==============================================
  442.     ; Local Constant/Variable Declaration Section
  443.     ;==============================================
  444.     Local $iLastWeekdayNum
  445.     
  446.     Select
  447.         Case Not StringIsInt($iWeekdayNum)
  448.             SetError(1)
  449.             Return 0
  450.         Case $iWeekdayNum < 1 Or $iWeekdayNum > 7
  451.             SetError(1)
  452.             Return 0
  453.         Case Else
  454.             If $iWeekdayNum = 1 Then
  455.                 $iLastWeekdayNum = 7
  456.             Else
  457.                 $iLastWeekdayNum = $iWeekdayNum - 1
  458.             EndIf
  459.             
  460.             Return $iLastWeekdayNum
  461.     EndSelect
  462. EndFunc   ;==>_DateLastWeekdayNum
  463.  
  464. ;===============================================================================
  465. ;
  466. ; Description:      Returns previous month number, based on the specified month.
  467. ; Parameter(s):     $iMonthNum - Month number
  468. ; Requirement(s):   None
  469. ; Return Value(s):  On Success - Previous month number
  470. ;                   On Failure - 0 and sets @ERROR = 1
  471. ; Author(s):        Jeremy Landes <jlandes@landeserve.com>
  472. ; Note(s):          None
  473. ;
  474. ;===============================================================================
  475. Func _DateLastMonthNum($iMonthNum)
  476.     ;==============================================
  477.     ; Local Constant/Variable Declaration Section
  478.     ;==============================================
  479.     Local $iLastMonthNum
  480.     
  481.     Select
  482.         Case Not StringIsInt($iMonthNum)
  483.             SetError(1)
  484.             Return 0
  485.         Case $iMonthNum < 1 Or $iMonthNum > 12
  486.             SetError(1)
  487.             Return 0
  488.         Case Else
  489.             If $iMonthNum = 1 Then
  490.                 $iLastMonthNum = 12
  491.             Else
  492.                 $iLastMonthNum = $iMonthNum - 1
  493.             EndIf
  494.             
  495.             $iLastMonthNum = StringFormat( "%02d", $iLastMonthNum)
  496.             Return $iLastMonthNum
  497.     EndSelect
  498. EndFunc   ;==>_DateLastMonthNum
  499.  
  500. ;===============================================================================
  501. ;
  502. ; Description:      Returns previous month's year, based on the specified month
  503. ;                   and year.
  504. ; Parameter(s):     $iMonthNum - Month number
  505. ;                   $iYear     - Year
  506. ; Requirement(s):   None
  507. ; Return Value(s):  On Success - Previous month's year
  508. ;                   On Failure - 0 and sets @ERROR = 1
  509. ; Author(s):        Jeremy Landes <jlandes@landeserve.com>
  510. ; Note(s):          None
  511. ;
  512. ;===============================================================================
  513. Func _DateLastMonthYear($iMonthNum, $iYear)
  514.     ;==============================================
  515.     ; Local Constant/Variable Declaration Section
  516.     ;==============================================
  517.     Local $iLastYear
  518.     
  519.     Select
  520.         Case Not StringIsInt($iMonthNum) Or Not StringIsInt($iYear)
  521.             SetError(1)
  522.             Return 0
  523.         Case $iMonthNum < 1 Or $iMonthNum > 12
  524.             SetError(1)
  525.             Return 0
  526.         Case Else
  527.             If $iMonthNum = 1 Then
  528.                 $iLastYear = $iYear - 1
  529.             Else
  530.                 $iLastYear = $iYear
  531.             EndIf
  532.             
  533.             $iLastYear = StringFormat( "%04d", $iLastYear)
  534.             Return $iLastYear
  535.     EndSelect
  536. EndFunc   ;==>_DateLastMonthYear
  537.  
  538. ;===============================================================================
  539. ;
  540. ; Description:      Returns the name of the month, based on the specified month.
  541. ; Parameter(s):     $iMonthNum - Month number
  542. ;                   $iShort    - Format:
  543. ;                                0 = Long name of the month
  544. ;                                1 = Abbreviated name of the month
  545. ; Requirement(s):   None
  546. ; Return Value(s):  On Success - Month name
  547. ;                   On Failure - A NULL string and sets @ERROR = 1
  548. ; Author(s):        Jeremy Landes <jlandes@landeserve.com>
  549. ; Note(s):          English only
  550. ;
  551. ;===============================================================================
  552. Func _DateMonthOfYear($iMonthNum, $iShort)
  553.     ;==============================================
  554.     ; Local Constant/Variable Declaration Section
  555.     ;==============================================
  556.     Local $aMonthOfYear[13]
  557.     
  558.     $aMonthOfYear[1] = "January"
  559.     $aMonthOfYear[2] = "February"
  560.     $aMonthOfYear[3] = "March"
  561.     $aMonthOfYear[4] = "April"
  562.     $aMonthOfYear[5] = "May"
  563.     $aMonthOfYear[6] = "June"
  564.     $aMonthOfYear[7] = "July"
  565.     $aMonthOfYear[8] = "August"
  566.     $aMonthOfYear[9] = "September"
  567.     $aMonthOfYear[10] = "October"
  568.     $aMonthOfYear[11] = "November"
  569.     $aMonthOfYear[12] = "December"
  570.     
  571.     Select
  572.         Case Not StringIsInt($iMonthNum) Or Not StringIsInt($iShort)
  573.             SetError(1)
  574.             Return ""
  575.         Case $iMonthNum < 1 Or $iMonthNum > 12
  576.             SetError(1)
  577.             Return ""
  578.         Case Else
  579.             Select
  580.                 Case $iShort = 0
  581.                     Return $aMonthOfYear[$iMonthNum]
  582.                 Case $iShort = 1
  583.                     Return StringLeft($aMonthOfYear[$iMonthNum], 3)
  584.                 Case Else
  585.                     SetError(1)
  586.                     Return ""
  587.             EndSelect
  588.     EndSelect
  589. EndFunc   ;==>_DateMonthOfYear
  590.  
  591. ;===============================================================================
  592. ;
  593. ; Description:      Returns next weekday number, based on the specified day of
  594. ;                   the week.
  595. ; Parameter(s):     $iWeekdayNum - Weekday number
  596. ; Requirement(s):   None
  597. ; Return Value(s):  On Success - Next weekday number
  598. ;                   On Failure - 0 and sets @ERROR = 1
  599. ; Author(s):        Jeremy Landes <jlandes@landeserve.com>
  600. ; Note(s):          None
  601. ;
  602. ;===============================================================================
  603. Func _DateNextWeekdayNum($iWeekdayNum)
  604.     ;==============================================
  605.     ; Local Constant/Variable Declaration Section
  606.     ;==============================================
  607.     Local $iNextWeekdayNum
  608.     
  609.     Select
  610.         Case Not StringIsInt($iWeekdayNum)
  611.             SetError(1)
  612.             Return 0
  613.         Case $iWeekdayNum < 1 Or $iWeekdayNum > 7
  614.             SetError(1)
  615.             Return 0
  616.         Case Else
  617.             If $iWeekdayNum = 7 Then
  618.                 $iNextWeekdayNum = 1
  619.             Else
  620.                 $iNextWeekdayNum = $iWeekdayNum + 1
  621.             EndIf
  622.             
  623.             Return $iNextWeekdayNum
  624.     EndSelect
  625. EndFunc   ;==>_DateNextWeekdayNum
  626.  
  627. ;===============================================================================
  628. ;
  629. ; Description:      Returns next month number, based on the specified month.
  630. ; Parameter(s):     $iMonthNum - Month number
  631. ; Requirement(s):   None
  632. ; Return Value(s):  On Success - Next month number
  633. ;                   On Failure - 0 and sets @ERROR = 1
  634. ; Author(s):        Jeremy Landes <jlandes@landeserve.com>
  635. ; Note(s):          None
  636. ;
  637. ;===============================================================================
  638. Func _DateNextMonthNum($iMonthNum)
  639.     ;==============================================
  640.     ; Local Constant/Variable Declaration Section
  641.     ;==============================================
  642.     Local $iNextMonthNum
  643.     
  644.     Select
  645.         Case Not StringIsInt($iMonthNum)
  646.             SetError(1)
  647.             Return 0
  648.         Case $iMonthNum < 1 Or $iMonthNum > 12
  649.             SetError(1)
  650.             Return 0
  651.         Case Else
  652.             If $iMonthNum = 12 Then
  653.                 $iNextMonthNum = 1
  654.             Else
  655.                 $iNextMonthNum = $iMonthNum + 1
  656.             EndIf
  657.             
  658.             $iNextMonthNum = StringFormat( "%02d", $iNextMonthNum)
  659.             Return $iNextMonthNum
  660.     EndSelect
  661. EndFunc   ;==>_DateNextMonthNum
  662.  
  663. ;===============================================================================
  664. ;
  665. ; Description:      Returns next month's year, based on the specified month and
  666. ;                   year.
  667. ; Parameter(s):     $iMonthNum - Month number
  668. ;                   $iYear     - Year
  669. ; Requirement(s):   None
  670. ; Return Value(s):  On Success - Next month's year
  671. ;                   On Failure - 0 and sets @ERROR = 1
  672. ; Author(s):        Jeremy Landes <jlandes@landeserve.com>
  673. ; Note(s):          None
  674. ;
  675. ;===============================================================================
  676. Func _DateNextMonthYear($iMonthNum, $iYear)
  677.     ;==============================================
  678.     ; Local Constant/Variable Declaration Section
  679.     ;==============================================
  680.     Local $iNextYear
  681.     
  682.     Select
  683.         Case Not StringIsInt($iMonthNum) Or Not StringIsInt($iYear)
  684.             SetError(1)
  685.             Return 0
  686.         Case $iMonthNum < 1 Or $iMonthNum > 12
  687.             SetError(1)
  688.             Return 0
  689.         Case Else
  690.             If $iMonthNum = 12 Then
  691.                 $iNextYear = $iYear + 1
  692.             Else
  693.                 $iNextYear = $iYear
  694.             EndIf
  695.             
  696.             $iNextYear = StringFormat( "%04d", $iNextYear)
  697.             Return $iNextYear
  698.     EndSelect
  699. EndFunc   ;==>_DateNextMonthYear
  700.  
  701. ;===============================================================================
  702. ;
  703. ; Description:      Split Date and Time into two separateArrays.
  704. ; Parameter(s):     $sDate format "yyyy/mm/dd[ hh:mm[:ss]]"
  705. ;                    or    format "yyyy/mm/dd[Thh:mm[:ss]]"
  706. ;                    or    format "yyyy-mm-dd[ hh:mm[:ss]]"
  707. ;                    or    format "yyyy-mm-dd[Thh:mm[:ss]]"
  708. ;                    or    format "yyyy.mm.dd[ hh:mm[:ss]]"
  709. ;                    or    format "yyyy.mm.dd[Thh:mm[:ss]]"
  710. ;                   $asDatePart[4] array that contains the Date
  711. ;                   $iTimePart[4] array that contains the Time
  712. ; Requirement(s):   None
  713. ; Return Value(s):  Always 1
  714. ; Author(s):        Jos van der Zande
  715. ; Note(s):          Its expected you first do a _DateIsValid( $sDate ) for the input
  716. ;
  717. ;===============================================================================
  718. Func _DateTimeSplit($sDate, ByRef $asDatePart, ByRef $iTimePart)
  719.     Local $nMM
  720.     Local $nDD
  721.     Local $nYYYY
  722.     Local $sDateTime
  723.     ; split the Date and Time portion
  724.     $sDateTime = StringSplit($sDate, " T")
  725.     ; split the date portion
  726.     If $sDateTime[0] > 0 Then $asDatePart = StringSplit($sDateTime[1], "/-.")
  727.     ; split the Time portion
  728.     If $sDateTime[0] > 1 Then
  729.         ; Add the secconf 00 if not in the input
  730.         If StringLen($sDateTime[2]) < 8 Then $sDateTime[2] = $sDateTime[2] & ":00"
  731.         $iTimePart = StringSplit($sDateTime[2], ":")
  732.     EndIf
  733.     Return (1)
  734. EndFunc   ;==>_DateTimeSplit
  735.  
  736. ;===============================================================================
  737. ;
  738. ; Description:      Returns the number of days since noon 4713 BC January 1.
  739. ; Parameter(s):     $Year  - Year in format YYYY
  740. ;                   $Month - Month in format MM
  741. ;                   $sDate - Day of the month format DD
  742. ; Requirement(s):   None
  743. ; Return Value(s):  On Success - Returns the Juliandate
  744. ;                   On Failure - 0  and sets @ERROR = 1
  745. ; Author(s):        Jos van der Zande / Jeremy Landes
  746. ; Note(s):          None
  747. ;
  748. ;===============================================================================
  749. Func _DateToDayValue($iYear, $iMonth, $iDay)
  750.     Local $i_aFactor
  751.     Local $i_bFactor
  752.     Local $i_cFactor
  753.     Local $i_dFactor
  754.     Local $i_eFactor
  755.     Local $i_fFactor
  756.     Local $asDatePart[4]
  757.     Local $iJulianDate
  758.     ; Verify If InputDate is valid
  759.     If Not _DateIsValid(StringFormat( "%04d/%02d/%02d", $iYear, $iMonth, $iDay)) Then
  760.         SetError(1)
  761.         Return ("")
  762.     EndIf
  763.     If $iMonth < 3 Then
  764.         $iMonth = $iMonth + 12
  765.         $iYear = $iYear - 1
  766.     EndIf
  767.     $i_aFactor = Int($iYear / 100)
  768.     $i_bFactor = Int($i_aFactor / 4)
  769.     $i_cFactor = 2 - $i_aFactor + $i_bFactor
  770.     $i_eFactor = Int(1461 * ($iYear + 4716) / 4)
  771.     $i_fFactor = Int(153 * ($iMonth + 1) / 5)
  772.     $iJulianDate = $i_cFactor + $iDay + $i_eFactor + $i_fFactor - 1524.5
  773.     return ($iJulianDate)
  774. EndFunc   ;==>_DateToDayValue
  775.  
  776. ;===============================================================================
  777. ;
  778. ; Description:      Returns the DayofWeek number for a given Date.  1=Sunday
  779. ; Parameter(s):     $Year
  780. ;                   $Month
  781. ;                   $day
  782. ; Requirement(s):   None
  783. ; Return Value(s):  On Success - Returns Day of the Week Range is 1 to 7 where 1=Sunday.
  784. ;                   On Failure - 0 and sets @ERROR = 1
  785. ; Author(s):        Jos van der Zande <jdeb@autoitscript.com>
  786. ; Note(s):          None
  787. ;
  788. ;===============================================================================
  789. Func _DateToDayOfWeek($iYear, $iMonth, $iDay)
  790.     Local $asDatePart[4]
  791.     Local $i_aFactor
  792.     Local $i_yFactor
  793.     Local $i_mFactor
  794.     Local $i_dFactor
  795.     ; Verify If InputDate is valid
  796.     If Not _DateIsValid($iYear & "/" & $iMonth & "/" & $iDay) Then
  797.         SetError(1)
  798.         Return ("")
  799.     EndIf
  800.     $i_aFactor = Int( (14 - $iMonth) / 12)
  801.     $i_yFactor = $iYear - $i_aFactor
  802.     $i_mFactor = $iMonth + (12 * $i_aFactor) - 2
  803.     $i_dFactor = Mod($iDay + $i_yFactor + Int($i_yFactor / 4) - Int($i_yFactor / 100) + Int($i_yFactor / 400) + Int( (31 * $i_mFactor) / 12), 7)
  804.     return ($i_dFactor + 1)
  805. EndFunc   ;==>_DateToDayOfWeek
  806.  
  807. ;===============================================================================
  808. ;
  809. ; Description:      Add the given days since noon 4713 BC January 1 and return the date.
  810. ; Parameter(s):     $iJulianDate    - Julian date number
  811. ;                   $Year  - Year in format YYYY
  812. ;                   $Month - Month in format MM
  813. ;                   $sDate - Day of the month format DD
  814. ; Requirement(s):   None
  815. ; Return Value(s):  On Success - Returns the Date in the parameter vars
  816. ;                   On Failure - 0  and sets @ERROR = 1
  817. ; Author(s):        Jos van der Zande
  818. ; Note(s):          None
  819. ;
  820. ;===============================================================================
  821. Func _DayValueToDate($iJulianDate, ByRef $iYear, ByRef $iMonth, ByRef $iDay)
  822.     Local $i_zFactor
  823.     Local $i_wFactor
  824.     Local $i_aFactor
  825.     Local $i_bFactor
  826.     Local $i_xFactor
  827.     Local $i_cFactor
  828.     Local $i_dFactor
  829.     Local $i_eFactor
  830.     Local $i_fFactor
  831.     ; check for valid input date
  832.     If $iJulianDate < 0 Or Not IsNumber($iJulianDate) Then
  833.         SetError(1)
  834.         Return 0
  835.     EndIf
  836.     ; calculte the date
  837.     $i_zFactor = Int($iJulianDate + 0.5)
  838.     $i_wFactor = Int( ($i_zFactor - 1867216.25) / 36524.25)
  839.     $i_xFactor = Int($i_wFactor / 4)
  840.     $i_aFactor = $i_zFactor + 1 + $i_wFactor - $i_xFactor
  841.     $i_bFactor = $i_aFactor + 1524
  842.     $i_cFactor = Int( ($i_bFactor - 122.1) / 365.25)
  843.     $i_dFactor = Int(365.25 * $i_cFactor)
  844.     $i_eFactor = Int( ($i_bFactor - $i_dFactor) / 30.6001)
  845.     $i_fFactor = Int(30.6001 * $i_eFactor)
  846.     $iDay = $i_bFactor - $i_dFactor - $i_fFactor
  847.     ; (must get number less than or equal to 12)
  848.     If $i_eFactor - 1 < 13 Then
  849.         $iMonth = $i_eFactor - 1
  850.     Else
  851.         $iMonth = $i_eFactor - 13
  852.     EndIf
  853.     If $iMonth < 3 Then
  854.         $iYear = $i_cFactor - 4715    ; (if Month is January or February)
  855.     Else
  856.         $iYear = $i_cFactor - 4716    ;(otherwise)
  857.     EndIf
  858.     Return $iYear & "/" & $iMonth & "/" & $iDay
  859. EndFunc   ;==>_DayValueToDate
  860.  
  861. ;===============================================================================
  862. ;
  863. ; Description:      Returns the date in the PC's regional settings format.
  864. ; Parameter(s):     $date - format "YYYY/MM/DD"
  865. ;                   $sType - :
  866. ;                      0 - Display a date and/or time. If there is a date part, display it as a short date.
  867. ;                          If there is a time part, display it as a long time. If present, both parts are displayed.
  868. ;                      1 - Display a date using the long date format specified in your computer's regional settings.
  869. ;                      2 - Display a date using the short date format specified in your computer's regional settings.
  870. ;                      3 - Display a time using the time format specified in your computer's regional settings.
  871. ;                      4 - Display a time using the 24-hour format (hh:mm).
  872. ; Requirement(s):   None
  873. ; Return Value(s):  On Success - Returns date in proper format
  874. ;                   On Failure - 0  and Set
  875. ;                                   @ERROR to:  1 - Invalid $sDate
  876. ;                                               2 - Invalid $sType
  877. ; Author(s):        Jos van der Zande <jdeb@autoitscript.com>
  878. ; Note(s):          None...
  879. ;
  880. ;===============================================================================
  881. Func _DateTimeFormat($sDate, $sType)
  882.     Local $asDatePart[4]
  883.     Local $asTimePart[4]
  884.     Local $sReg_DateValue = ""
  885.     Local $sReg_TimeValue = ""
  886.     Local $sTempDate
  887.     Local $sNewTime
  888.     Local $sNewDate
  889.     Local $sAM
  890.     Local $sPM
  891.     Local $iWday
  892.     ; Verify If InputDate is valid
  893.     If Not _DateIsValid($sDate) Then
  894.         SetError(1)
  895.         Return ("")
  896.     EndIf
  897.     ; input validation
  898.     If $sType < 0 Or $sType > 4 Or Not IsInt($sType) Then
  899.         SetError(2)
  900.         Return ("")
  901.     EndIf
  902.     ; split the date and time into arrays
  903.     _DateTimeSplit($sDate, $asDatePart, $asTimePart)
  904.     
  905.     If $sType = 0 Then
  906.         $sReg_DateValue = "sShortDate"
  907.         If $asTimePart[0] > 1 Then $sReg_TimeValue = "sTimeFormat"
  908.     EndIf
  909.     
  910.     If $sType = 1 Then $sReg_DateValue = "sLongDate"
  911.     If $sType = 2 Then $sReg_DateValue = "sShortDate"
  912.     If $sType = 3 Then $sReg_TimeValue = "sTimeFormat"
  913.     If $sType = 4 Then $sReg_TimeValue = "sTime"
  914.     $sNewDate = ""
  915.     If $sReg_DateValue <> "" Then
  916.         $sTempDate = RegRead("HKEY_CURRENT_USER\Control Panel\International", $sReg_DateValue)
  917.         $sAM = RegRead("HKEY_CURRENT_USER\Control Panel\International", "s1159")
  918.         $sPM = RegRead("HKEY_CURRENT_USER\Control Panel\International", "s2359")
  919.         If $sAM = "" Then $sAM = "AM"
  920.         If $sPM = "" Then $sPM = "PM"
  921.         $iWday = _DateToDayOfWeek($asDatePart[1], $asDatePart[2], $asDatePart[3])
  922.         $asDatePart[3] = StringRight("0" & $asDatePart[3], 2) ; make sure the length is 2
  923.         $asDatePart[2] = StringRight("0" & $asDatePart[2], 2) ; make sure the length is 2
  924.         $sTempDate = StringReplace($sTempDate, "d", "@")
  925.         $sTempDate = StringReplace($sTempDate, "m", "#")
  926.         $sTempDate = StringReplace($sTempDate, "y", "&")
  927.         $sTempDate = StringReplace($sTempDate, "@@@@", _DateDayOfWeek($iWday, 0))
  928.         $sTempDate = StringReplace($sTempDate, "@@@", _DateDayOfWeek($iWday, 1))
  929.         $sTempDate = StringReplace($sTempDate, "@@", $asDatePart[3])
  930.         $sTempDate = StringReplace($sTempDate, "@", StringReplace(StringLeft($asDatePart[3], 1), "0", "") & StringRight($asDatePart[3], 1))
  931.         $sTempDate = StringReplace($sTempDate, "####", _DateMonthOfYear($asDatePart[2], 0))
  932.         $sTempDate = StringReplace($sTempDate, "###", _DateMonthOfYear($asDatePart[2], 1))
  933.         $sTempDate = StringReplace($sTempDate, "##", $asDatePart[2])
  934.         $sTempDate = StringReplace($sTempDate, "#", StringReplace(StringLeft($asDatePart[2], 1), "0", "") & StringRight($asDatePart[2], 1))
  935.         $sTempDate = StringReplace($sTempDate, "&&&&", $asDatePart[1])
  936.         $sTempDate = StringReplace($sTempDate, "&&", StringRight($asDatePart[1], 2))
  937.         $sNewDate = $sTempDate
  938.     EndIf
  939.     If $sReg_TimeValue <> "" Then
  940.         $sNewTime = RegRead("HKEY_CURRENT_USER\Control Panel\International", $sReg_TimeValue)
  941.         If $sType = 4 Then
  942.             $sNewTime = $asTimePart[1] & $sNewTime & $asTimePart[2]
  943.         Else
  944.             If $asTimePart[1] < 12 Then
  945.                 $sNewTime = StringReplace($sNewTime, "tt", "AM")
  946.                 If $asTimePart[1] = 0 Then $asTimePart[1] = 12
  947.             Else
  948.                 $sNewTime = StringReplace($sNewTime, "tt", "PM")
  949.                 If $asTimePart[1] > 12 Then $asTimePart[1] = $asTimePart[1] - 12
  950.             EndIf
  951.             $asTimePart[1] = StringRight("0" & $asTimePart[1], 2) ; make sure the length is 2
  952.             $asTimePart[2] = StringRight("0" & $asTimePart[2], 2) ; make sure the length is 2
  953.             $asTimePart[3] = StringRight("0" & $asTimePart[3], 2) ; make sure the length is 2
  954.             $sNewTime = StringReplace($sNewTime, "hh", $asTimePart[1])
  955.             $sNewTime = StringReplace($sNewTime, "h", StringReplace(StringLeft($asTimePart[1], 1), "0", "") & StringRight($asTimePart[1], 1))
  956.             $sNewTime = StringReplace($sNewTime, "mm", $asTimePart[2])
  957.             $sNewTime = StringReplace($sNewTime, "ss", $asTimePart[3])
  958.         EndIf
  959.         $sNewDate = StringStripWS($sNewDate & " " & $sNewTime, 3)
  960.     EndIf
  961.     Return ($sNewDate)
  962. EndFunc   ;==>_DateTimeFormat
  963.  
  964. ;===============================================================================
  965. ;
  966. ; Description:      Returns the the julian date in format YYDDD
  967. ; Parameter(s):     $iJulianDate    - Julian date number
  968. ;                   $Year  - Year in format YYYY
  969. ;                   $Month - Month in format MM
  970. ;                   $sDate - Day of the month format DD
  971. ; Requirement(s):   None
  972. ; Return Value(s):  On Success - Returns the Date in the parameter vars
  973. ;                   On Failure - 0  and sets @ERROR = 1
  974. ; Author(s):        Jeremy Landes / Jos van der Zande
  975. ; Note(s):          None
  976. ;
  977. ;===============================================================================
  978. Func _DateJulianDayNo($iYear, $iMonth, $iDay)
  979.     Local $sFullDate
  980.     Local $aiDaysInMonth
  981.     Local $iJDay
  982.     Local $iCntr
  983.     ; Verify If InputDate is valid
  984.     $sFullDate = StringFormat( "%04d/%02d/%02d", $iYear, $iMonth, $iDay)
  985.     If Not _DateIsValid($sFullDate) Then
  986.         SetError(1)
  987.         Return ""
  988.     EndIf
  989.     ; Build JDay value
  990.     $iJDay = 0
  991.     $aiDaysInMonth = __DaysInMonth($iYear)
  992.     For $iCntr = 1 To $iMonth - 1
  993.         $iJDay = $iJDay + $aiDaysInMonth[$iCntr]
  994.     Next
  995.     $iJDay = ($iYear * 1000) + ($iJDay + $iDay)
  996.     Return $iJDay
  997. EndFunc   ;==>_DateJulianDayNo
  998.  
  999. ;===============================================================================
  1000. ;
  1001. ; Description:      Returns the date for a julian date in format YYDDD
  1002. ; Parameter(s):     $iJDate  - Julian date number
  1003. ; Requirement(s):   None
  1004. ; Return Value(s):  On Success - Returns the Date in format YYYY/MM/DD
  1005. ;                   On Failure - 0  and sets @ERROR = 1
  1006. ; Author(s):        Jeremy Landes / Jos van der Zande
  1007. ; Note(s):          None
  1008. ;
  1009. ;===============================================================================
  1010. Func _JulianToDate($iJDay)
  1011.     Local $aiDaysInMonth
  1012.     Local $iYear
  1013.     Local $iMonth
  1014.     Local $iDay
  1015.     Local $iDays
  1016.     Local $iMaxDays
  1017.     Local $sSep = "/"
  1018.     ; Verify If InputDate is valid
  1019.     $iYear = Int($iJDay / 1000)
  1020.     $iDays = Mod($iJDay, 1000)
  1021.     $iMaxDays = 365
  1022.     If _DateIsLeapYear($iYear) Then $iMaxDays = 366
  1023.     If $iDays > $iMaxDays Then
  1024.         SetError(1)
  1025.         Return ""
  1026.     EndIf
  1027.     ; Convert to regular date
  1028.     $aiDaysInMonth = __DaysInMonth($iYear)
  1029.     $iMonth = 1
  1030.     While $iDays > $aiDaysInMonth[ $iMonth ]
  1031.         $iDays = $iDays - $aiDaysInMonth[ $iMonth ]
  1032.         $iMonth = $iMonth + 1
  1033.     WEnd
  1034.     $iDay = $iDays
  1035.     Return StringFormat( "%04d%s%02d%s%02d", $iYear, $sSep, $iMonth, $sSep, $iDay)
  1036. EndFunc   ;==>_JulianToDate
  1037.  
  1038. ;===============================================================================
  1039. ;
  1040. ; Description:      Returns the current Date and Time in the pc's format
  1041. ; Parameter(s):     None
  1042. ; Requirement(s):   None
  1043. ; Return Value(s):  On Success - Date in pc's format
  1044. ; Author(s):        Jos van der Zande
  1045. ; Note(s):          None
  1046. ;
  1047. ;===============================================================================
  1048. Func _Now()
  1049.     Return (_DateTimeFormat(@YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC, 0))
  1050. EndFunc   ;==>_Now
  1051.  
  1052. ;===============================================================================
  1053. ;
  1054. ; Description:      Returns the current Date and Time in format YYYY/MM/DD HH:MM:SS
  1055. ; Parameter(s):     None
  1056. ; Requirement(s):   None
  1057. ; Return Value(s):  On Success - Date in in format YYYY/MM/DD HH:MM:SS
  1058. ; Author(s):        Jos van der Zande
  1059. ; Note(s):          None
  1060. ;
  1061. ;===============================================================================
  1062. Func _NowCalc()
  1063.     Return (@YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC)
  1064. EndFunc   ;==>_NowCalc
  1065. ;===============================================================================
  1066. ;
  1067. ; Description:      Returns the current Date in format YYYY/MM/DD
  1068. ; Parameter(s):     None
  1069. ; Requirement(s):   None
  1070. ; Return Value(s):  On Success - Date in in format YYYY/MM/DD
  1071. ; Author(s):        Jos van der Zande
  1072. ; Note(s):          None
  1073. ;
  1074. ;===============================================================================
  1075. Func _NowCalcDate()
  1076.     Return (@YEAR & "/" & @MON & "/" & @MDAY)
  1077. EndFunc   ;==>_NowCalcDate
  1078.  
  1079. ;===============================================================================
  1080. ;
  1081. ; Description:      Returns the current Date in the pc's format
  1082. ; Parameter(s):     None
  1083. ; Requirement(s):   None
  1084. ; Return Value(s):  On Success - Date in pc's format
  1085. ; Author(s):        Jos van der Zande (Larry's idea)
  1086. ; Note(s):          None
  1087. ;
  1088. ;===============================================================================
  1089. Func _NowDate()
  1090.     Return (_DateTimeFormat(@YEAR & "/" & @MON & "/" & @MDAY, 0))
  1091. EndFunc   ;==>_NowDate
  1092.  
  1093. ;===============================================================================
  1094. ;
  1095. ; Description:      Returns the current Date and Time in the pc's format
  1096. ; Parameter(s):     None
  1097. ; Requirement(s):   None
  1098. ; Return Value(s):  On Success - Date in pc's format
  1099. ; Author(s):        Jos van der Zande
  1100. ; Note(s):          None
  1101. ;
  1102. ;===============================================================================
  1103. Func _NowTime()
  1104.     Return (_DateTimeFormat(@YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC, 3))
  1105. EndFunc   ;==>_NowTime
  1106.  
  1107. ;===============================================================================
  1108. ;
  1109. ; Description:      Converts the specified tick amount to hours, minutes, and
  1110. ;                   seconds.
  1111. ; Parameter(s):     $iTicks - Tick amount
  1112. ;                   $iHours - Variable to store the hours (ByRef)
  1113. ;                   $iMins  - Variable to store the minutes (ByRef)
  1114. ;                   $iSecs  - Variable to store the seconds (ByRef)
  1115. ; Requirement(s):   None
  1116. ; Return Value(s):  On Success - 1
  1117. ;                   On Failure - 0 and sets @ERROR = 1
  1118. ; Author(s):        Marc <mrd@gmx.de>
  1119. ; Note(s):          None
  1120. ;
  1121. ;===============================================================================
  1122. Func _TicksToTime($iTicks, ByRef $iHours, ByRef $iMins, ByRef $iSecs)
  1123.     If StringIsInt($iTicks) Then
  1124.         $iTicks = Round($iTicks / 1000)
  1125.         $iHours = Int($iTicks / 3600)
  1126.         $iTicks = Mod($iTicks, 3600)
  1127.         $iMins = Int($iTicks / 60)
  1128.         $iSecs = Round(Mod($iTicks, 60))
  1129.         ; If $iHours = 0 then $iHours = 24
  1130.         Return 1
  1131.     Else
  1132.         SetError(1)
  1133.         Return 0
  1134.     EndIf
  1135. EndFunc   ;==>_TicksToTime
  1136.  
  1137. ;===============================================================================
  1138. ;
  1139. ; Description:      Converts the specified hours, minutes, and seconds to ticks.
  1140. ; Parameter(s):     $iHours - Hours
  1141. ;                   $iMins  - Minutes
  1142. ;                   $iSecs  - Seconds
  1143. ; Requirement(s):   None
  1144. ; Return Value(s):  On Success - Converted tick amount
  1145. ;                   On Failure - 0 and sets @ERROR = 1
  1146. ; Author(s):        Marc <mrd@gmx.de>
  1147. ; Note(s):          None
  1148. ;
  1149. ;===============================================================================
  1150. Func _TimeToTicks($iHours, $iMins, $iSecs)
  1151.     ;==============================================
  1152.     ; Local Constant/Variable Declaration Section
  1153.     ;==============================================
  1154.     Local $iTicks
  1155.     
  1156.     If StringIsInt($iHours) And StringIsInt($iMins) And StringIsInt($iSecs) Then
  1157.         $iTicks = 1000 * ( (3600 * $iHours) + (60 * $iMins) + $iSecs)
  1158.         Return $iTicks
  1159.     Else
  1160.         SetError(1)
  1161.         Return 0
  1162.     EndIf
  1163. EndFunc   ;==>_TimeToTicks
  1164.  
  1165. ;===============================================================================
  1166. ;
  1167. ; Description:      returns an Array that contains the numbers of days per month
  1168. ;                   te specified year
  1169. ; Parameter(s):     $iYear
  1170. ; Requirement(s):   None
  1171. ; Return Value(s):  On Success - Array that contains the numbers of days per month
  1172. ;                   On Failure - none
  1173. ; Author(s):        Jos van der Zande / Jeremy Landes
  1174. ; Note(s):          None
  1175. ;
  1176. ;===============================================================================
  1177. Func __DaysInMonth($iYear)
  1178.     Local $aiDays
  1179.     $aiDays = StringSplit("31,28,31,30,31,30,31,31,30,31,30,31", ",")
  1180.     If _DateIsLeapYear($iYear) Then $aiDays[2] = 29
  1181.     Return $aiDays
  1182. EndFunc   ;==>__DaysInMonth