Questions about MultiCharts and user contributed studies.
bowlesj3
Posts: 2148
Joined: 21 Jul 2007
Has thanked: 210 times
Been thanked: 424 times

I had just posted a problem I was having with this command set.
NewTime_s = DateTime2ELTime_s(ELTimeToDateTime_s(Time_s) - 60);
It was not changing the NewTime_s at all. I deleted that prior post and replaced it with this one when I remembered the function I wrote below back in January. It has the proper use of the above command set. This function is a lot easier to remember and it is worth studying since it takes a while to figure out how the above command is to be used properly (at least it took me a while).

I just checked. It turns out the study I have that was using the above command instead of the function below is properly using the "OneMinute" value of OneMinute(1/1440), {1 divided by the number of minutes in a day}. That is the problem with the above command. It is too complex to remember for occasional use every 1 or 2 years. The function immediately below spells it out for you (for documentation purposes at least). Otherwise you can just extract what you need from the function below.

Code: Select all

``` {A_TimeAddSub_s - Written by John Bowles} { Sample Calls Result_s = A_TimeAddSub_s(Time_s, "A", 1, "S"); {Time_s add 1 second} Result_s = A_TimeAddSub_s(Time_s, "A", 5, "M"); {Time_s add 5 minutes} Result_s = A_TimeAddSub_s(Time_s, "A", 3, "H"); {Time_s add 3 hours} Result_s = A_TimeAddSub_s(Time_s, "S", 3, "S"); {Time_s subtract 3 seconds} Result_s = A_TimeAddSub_s(Time_s, "S", 3, "M"); {Time_s subtract 3 minutes} Result_s = A_TimeAddSub_s(Time_s, "S", 2, "H"); {Time_s subtract 2 hours} } { This is a test caller you can use to learn to trust it. Just copy the actual code out to a study, compile it and test it on a seconds chart. inputs: Units(3); Print( File("C:\A_DateTimeLearningTests1.txt"), " Time_s", " " , Time_s, " --- " , " add ", NumToStr(units,0), " Sec", " " , A_TimeAddSub_s(Time_s,"A", units, "S") , " -" , " add ", NumToStr(units,0), " min", " " , A_TimeAddSub_s(Time_s,"A", units, "M") , " -" , " add ", NumToStr(units,0), " hour", " " , A_TimeAddSub_s(Time_s,"A", units, "H") , " -" , " sub ", NumToStr(units,0), " Sec", " " , A_TimeAddSub_s(Time_s,"S", units, "S") , " -" , " sub ", NumToStr(units,0), " min", " " , A_TimeAddSub_s(Time_s,"S", units, "M") , " -" , " sub ", NumToStr(units,0), " hour", " " , A_TimeAddSub_s(Time_s,"S", units, "H") , " " , " "); } inputs: TimeIn(NumericSimple), AddSub(StringSimple), UnitsIn(NumericSimple), UnitsToAdd(StringSimple); variables: AddSubAmt(0), OneHour(1/24), {1 divided by the number of hours in a day} OneMinute(1/1440), {1 divided by the number of minutes in a day} OneSecond(1/86400); {1 divided by the number of seconds in a day} if AddSub = "A" then AddSubAmt = 1; if AddSub = "S" then AddSubAmt = -1; if AddSubAmt = 0 then A_TimeAddSub_s = 0 else begin if UnitsToAdd = "S" then A_TimeAddSub_s = DateTime2ELTime_s(ELTimeToDateTime_s(TimeIn) + ((UnitsIn * OneSecond) * AddSubAmt)); if UnitsToAdd = "M" then A_TimeAddSub_s = DateTime2ELTime_s(ELTimeToDateTime_s(TimeIn) + ((UnitsIn * OneMinute) * AddSubAmt)); if UnitsToAdd = "H" then A_TimeAddSub_s = DateTime2ELTime_s(ELTimeToDateTime_s(TimeIn) + ((UnitsIn * OneHour) * AddSubAmt)); end; ```
Last edited by bowlesj3 on 07 Jul 2009, edited 10 times in total.

TJ
Posts: 7458
Joined: 29 Aug 2006
Location: Global Citizen
Has thanked: 999 times
Been thanked: 2137 times
thanks for the useful function.

bowlesj3
Posts: 2148
Joined: 21 Jul 2007
Has thanked: 210 times
Been thanked: 424 times
No problem TJ. This is the type of stuff that should be shared.