dash007 Posted March 5, 2006 Share Posted March 5, 2006 Hi all,Here is my GUI:#include <GUIConstants.au3> ; == GUI generated with Koda == GUICreate("2Date", 250, 318) $MonthCal1 = GUICtrlCreateMonthCal("", 16, 40, 217, 193) GUICtrlCreateLabel("Please select your birthdate in the below calender", 8, 8, 238, 17) GUICtrlCreateLabel("You are:", 16, 270, 44, 17) $Input1 = GUICtrlCreateInput("", 16, 288, 217, 21, $WS_EX_WINDOWEDGE & $ES_CENTER) $Calc = GUICtrlCreateButton("Calculate", 72, 248, 113, 25, 0) GUISetState(@SW_SHOW) While 1 $msg = GuiGetMsg() Select Case $msg = $GUI_EVENT_CLOSE ExitLoop Case $msg = $Calc GUICtrlSetData($Input1, " days old ") Case Else ;;;;;;; EndSelect WEnd ExitWhat I am wanting is to calculate the number of days to date using the expression "year/month/day". For example : 20 years 2 months and 15 days.I didn't see a similar reference in the forum so I googled and came across Microsoft's website where I got the info mentioned below. But quite honestly, I don't know how to integrate/convert this into an Autoit code. Can somebody assist please. The details from MS website are as below:To calculate the number of days, months, and years between two dates, where the start and end dates are entered in cells A1 and A2 respectively, follow these steps: 1. Create a new workbook 2. Type the following data in the workbook (or any date you prefer): A1: 10/01/94 A2: 05/03/06 3. Type the following formula in cell D1: =YEAR(A2)-YEAR(A1)-IF(OR(MONTH(A2)<MONTH(A1),AND(MONTH(A2)=MONTH(A1),DAY(A2)<DAY(A1))),1,0)&" years, "&MONTH(A2)-MONTH(A1)+IF(AND(MONTH(A2)<=MONTH(A1),DAY(A2)<DAY(A1)),11,IF(AND(MONTH(A2)<MONTH(A1),DAY(A2)>=DAY(A1)),12,IF(AND(MONTH(A2)>MONTH(A1),DAY(A2)<DAY(A1)),-1)))&" months,"&A2-DATE(YEAR(A2),MONTH(A2)-IF(DAY(A2)<DAY(A1),1,0),DAY(A1))&" days" NOTE: If you copy and paste this formula, make sure that there are no line breaks, or the formula will not work. If you typed the formula correctly, cell D1 now displays: 12 years, 1 months, 23 days.Anyone know of a function that already does this or know how to use the above example in Autoit? Link to comment Share on other sites More sharing options...
greenmachine Posted March 5, 2006 Share Posted March 5, 2006 In date.au3 there are several date functions. _DateDiff is what you're looking for. From the helpfile: Returns the difference between 2 dates, expressed in the type requested. #include <Date.au3> _DateDiff($sType, $sStartDate, $sEndDate) Parameters $sType: D = Difference in days between the given dates M = Difference in months between the given dates Y = Difference in years between the given dates w = Difference in Weeks between the given dates h = Difference in hours between the given dates n = Difference in minutes between the given dates s = Difference in seconds between the given dates $sStartDate: Input date in the format "YYYY/MM/DD[ HH:MM:SS]" $sEndDate: Input End date in the format "YYYY/MM/DD[ HH:MM:SS]" Return Value Success: Difference between the 2 dates. Failure: 0 @Error: 0 = No error. 1 = Invalid $sType 2 = Invalid $sStartDate 3 = Invalid $sEndDate Link to comment Share on other sites More sharing options...
dash007 Posted March 5, 2006 Author Share Posted March 5, 2006 @greenmachine,I did read the help file, but didn't find what I need. Perhaps my request wasn't understood clearly. I want a combination of the three: year + month + day. I tested your advice (see code below):#include <Date.au3> $iDateCalc = _DateDiff( 'Y',"1994/01/10 00:00:00",_NowCalc()) MsgBox( 4096, "", "Number of years: " & $iDateCalc )In the above code I get the result as 12 years. But in reality the precise figure (and the one I want) is supposed to be "12 years, 1 months, 23 days". Perhaps there is a way to mix and match the code in the help file, but I can't figure that out. Can someone assist please Link to comment Share on other sites More sharing options...
greenmachine Posted March 5, 2006 Share Posted March 5, 2006 Took me a while to get this idea. I was trying to do it manually, and it was tough. $OldDate = "1994/01/10" $OldDateSplit = StringSplit ($OldDate, "/") $iYearCalc = _DateDiff( 'Y', $OldDate, _NowCalcDate()) $OldDateSplit[1] += $iYearCalc $iMonthCalc = _DateDiff( 'M', $OldDateSplit[1] & "/" & $OldDateSplit[2] & "/" & $OldDateSplit[3], _NowCalcDate()) $OldDateSplit[2] += $iMonthCalc If $OldDateSplit[2] > 12 Then $OldDateSplit[1] += 1 $OldDateSplit[2] -= 12 EndIf $iDayCalc = _DateDiff( 'D', $OldDateSplit[1] & "/" & $OldDateSplit[2] & "/" & $OldDateSplit[3], _NowCalcDate()) MsgBox (0, "date change", $iYearCalc & @CRLF & $iMonthCalc & @CRLF & $iDayCalc) Link to comment Share on other sites More sharing options...
GioVit Posted March 5, 2006 Share Posted March 5, 2006 Try This: $StartDate = "1994/01/10 00:00:00" $EndDate = StringLeft(_NowCalc(),8) & StringMid($StartDate,9,10) $Years = _DateDiff("y", $StartDate, $EndDate) $Months = _DateDiff("m", $StartDate, $EndDate) $Months -= $Years * 12 $Days = _DateDiff("d", $EndDate, _NowCalc()) if $Days < 0 Then $Days += _DateDaysInMonth(StringLeft($EndDate,4), StringMid($EndDate,6,2) -1) $Months -= 1 EndIf MsgBox(0, "Date Diff Calc", $Years & " Year(s), " & $Months & " Month(s), " & $Days & " Day(s)") Link to comment Share on other sites More sharing options...
dash007 Posted March 6, 2006 Author Share Posted March 6, 2006 @greenmachine & @GioVit, Thank you very much for your assistance. Both your codes work. I was going crazy trying to come up with a solution, but you guys have solved it for me. Very much appreciate it. Link to comment Share on other sites More sharing options...
GordonShumway Posted July 3, 2022 Share Posted July 3, 2022 I've written this piece of coding, with "no use of own calculations" but only "function calls". $BegDate = "1994/01/10" $EndDate = _NowCalcDate() $Years = _DateDiff("Y", $BegDate, $EndDate) $TmpDate = _DateAdd ("Y", $Years , $BegDate) $Months = _DateDiff("M", $TmpDate, $EndDate) $TmpDate = _DateAdd ("M", $Months , $TmpDate) $Days = _DateDiff("D", $TmpDate, $EndDate) MsgBox(0, "Date Diff Calc", $Years & " Year(s), " & $Months & " Month(s), " & $Days & " Day(s)") 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