PRO
dbeard
USA
Asked
— Edited
Can anyone point me in the direction to find a way to tell how much time there is between two dates.
For example Date1 = 10/29/2016 10:30:54 PM and Date2 = 10/28/2016 7:00:01 AM
How many days, hours, minutes, and seconds before date 1.
You'd need to break down the days and time separately then subtract. Have you got a script example you are working on?
@Dbeard,
EZ-Script has a few limitations and some parser bugs.
If you are doing complex or repetitive calculations, I would invest my time in a Plugin.
c# version:
output:
Thanks, ptp. I appreciate the code, not sure my skills are up to coding a plugin. I have trouble manipulating a date. I will start reviewing the plugin documentation and tutorial to see if I can figure it out.
@dbeard,
fixed a bug and added comments to explain my logic.
[feature] DateTime Functions MinDate() MaxDate() MonthName() AddDays() AddMonths() AddYears() AddHours() AddMinute() AddSeconds() FmtNum()
Casting Functions These functions are to cast objects from one datatype to another To Double: CDBL() To Integer: CInt() To Long: CLong() To Unsigned Integer: CUint() To Unsigned Long: CULong() To DateTime: CDateTime() [/feature]
@DJ,
That's a major refactoring! I tried that before but does not work as the OP wants. does not handle days, months, years.
Check the output:
Your code is very fun and impressive! You could save a bit of code by parsing the output of this...
The $diff in this case is 884.22:57:58. That's
I just added a fmttimespan() to EZ-Script for the next release. It will allow formatting of a timespan (which is what a datetime subtraction/addition creates)
@DJ,
yes it was more an exercise i can't do that in my day job
I like to test concepts: Goto / Return (like a function call) Working with an array to minimize variable usage Reusing a (function call)
everything went well.
yes i could parse the big number (days), but i would need to calculate the leap years, to extract years, then how many leap years in between, so i decided to do it from scratch.
It's awesome
I have been fiddling with the idea of making user defined functions in ez-script. It would be a control where you can define the function and parameters.
My first thought was to make the function be ez-script. But lately i've been leaning toward the idea of having the function be c# to give additional functionality. That means you could create the c# code for the internal function and be a) extra fast b) have control over the ARC architecture just like a plugin
@DJ... Great idea.... User defined functions would be awesome....
@DJ,
I'm glad you raised that topic.
Plugin: the concept is neat, but as you know does not work on Mobile and Windows Universal Apps
user functions: I would do it first in EZ-Script, as you know C# CodeDom/Generation is not allowed on IOS Apps.
that way you can use user functions everywhere.
I was thinking of the user function being similar to a plugin's version management and shareable in an online library.
if the function is a mere EZ-Script and defined on a per project basis, there would be no version control and outdated/bugger functions would be difficult to manage across projects.
I'll think a bit on what an EZ-Script user function with online version management simlar to a plugin would look like. hmmm...
While we're on the topic... (and assuming I got the gist of this function idea).... A function or library for serial would be great... I am just ok at serial stuff, but streamlining serial receive would be welcome...
@Richard R,
Can you elaborate.
@PTP.... I would like to just read serial into a variable in a function call... avoiding GetByteAt, UARTAvailable, UARTRead, etc....
And maybe even a simple parser... $string=(left($string),10,5) Something like this would set $string as the 10th character in and read for 5 characters after.... This way you can pick the data you want out of the incoming serial data
How would you know if any data had been transmitted, how to tell if a packet had been received without UartAvailable()?
Why are you ever GetByteAt() anyway? That's not a serial specific function - it's a function to get a byte(character) within a string
@DJ I was using GetByteAt when I was using my Roomba ...example code snippet...
@PTP, @DJ... So my idea was a function call something like this... Not knowing C# limits my understanding of what can be done here so apologies...
What ever is in the buffer (if anything) would be read into $data... The complexity is removed... And It would be up to the user to pick out and/or convert the data he wants using maybe simple parser....
So what happens when you call "GetSerialData()" and you only get 1 byte, but your example code looks like it isexpecting 4 bytes.
This is the reason you have..
You can't trust that you ha
ve received all the data with a single command.
(see what i did there?)
@DJ... Ha, Ha... Touché..... Still function() commands to return data is a good idea...
No, it's not a good idea, as the example was presented
Additionally, using UARTRead() with binary/byte data is not recommended. UARTRead(), as the documentation dictates, is for ASCII String data.
Use UARTReadBinary(), which puts the data into an array.
To read all contents in one line, use this...
or for ASCII Read all, it's
Here's the info from the EZ-Script manual in ARC:
[feature] UARTRead( boardIndex, port, numBytes ) Receive ASCII bytes from the Peripheral UART Receive Buffer of the EZ-B v4. The UART receive buffers on the EZ-B v4 are 5,000 bytes. To know how many bytes are available, use the UARTAvailable() function. The Board Index is the EZ-B index starting at 0. The port can be 0, 1 or 2. Look near at the UART Port section lower in this document for the EZ-B Pin’s associated with each UART Port. Example: UARTRead(0, 0, 10) Example: UARTRead(0, 0, UARTAvailable(0, 1))
UARTReadBinary( boardIndex, port, numBytes, variable ) Receive binary bytes from the Peripheral UART Receive Buffer of the EZ-B v4 into the variable as an array. The UART receive buffers on the EZ-B v4 are 5,000 bytes. To know how many bytes are available, use the UARTAvailable() function. The Board Index is the EZ-B index starting at 0. The port can be 0, 1 or 2. Look near at the UART Port section lower in this document for the EZ-B Pin’s associated with each UART Port. Example: UARTReadBinary(0, 0, 10, $variable) Example: UARTReadBinary(0, 0, UARTAvailable(0, 1), $variable)
UARTReadAvailable( boardIndex, port ) Receive all available ASCII bytes from the Peripheral UART Receive Buffer of the EZ-B v4. The UART receive buffers on the EZ-B v4 are 5,000 bytes. The Board Index is the EZ-B index starting at 0. The port can be 0, 1 or 2. Look near at the UART Port section lower in this document for the EZ-B Pin’s associated with each UART Port. Example: UARTReadAvailable(0, 0) Example: UARTReadAvailable(0, 0) [/feature]
@DJ.... Got you. I do understand how it works, I just have to experiment further with UART... Learning to better parse the incoming information for the relevant data that I need is the next step.... Thanks
Did you also notice that the command you were asking for exists? I pasted it in the above message from the script manual. It's uartreadavailable(). It's just that I wouldn't recommend using it for your application.
Actually, I wouldn't use it for any application other than debugging. Because you do need to know how much data is in the buffer. And you should only read as much data as your expected packet size is and leave the other packets in the buffer to process on the next loop.
@DJ... Yes, last night I went over and re-read all the UART documentation... I didn't pay much attention to what uartreadavailable() really does as I only used what I needed when I was messing with the UART and roomba.... I am going to go back and do some more experimenting... Thanks as always