Spotfire: Timespan/Date Converted to Real Number? - spotfire

Is there a possibility that a Timespan/date can be converted to a real number?
I'm trying to calculate the average days it takes to complete a job, per job category. But I believe the bar chart is having issues with calculations because of the timespan format.
Thanks!

If you have a TimeSpan data type, you can turn it into a real number by wrapping the Real(..) function around it. If you have a date, you could for instance use the function ToEpochSeconds(..) to turn it into the number of seconds from start of 1970. Then you can divide it by 60 * 60 * 24 to turn it into days.
There are other functions available if you look into Conversion functions or Date and time functions.

Related

Rounding error in SECOND function when converting hh:mm:ss.000 to milliseconds in Excel?

I am trying to write a function to convert a column of times entered in a [hh]:mm:ss.000 format to milliseconds using the following function:
=MINUTE(C75)*60000+SECOND(C75)*1000+RIGHT(TEXT(C75, "hh:mm:ss.000"),3)
From playing around with the numbers with a calculator, I've deduced that the problem is that the SECOND() function is rounding to the nearest second based on the milliseconds rather than copying the exact value. For example, 00:17:39.320 will convert correctly, but 00:17:39.760 will not, as the function will convert the seconds using 40 rather than 39.
Does anyone know ways around this?
Thank you!
Multiply your time by 86400000
=C75 * 86400000
Excel stores time as a fraction of a date. 12.00 noon will be .5 because its half of 24. Therefore 24 hours times 60 minutes times 60 seconds give you total seconds times 1000 milliseconds gives your desired result.

How to conditionaly check an hour difference between two dates in excel

I have a date with hours and minutes like 2/3/2019 10:30 am , and I do the following to find the diffence in hours which I already formatted like ( h )
=now() - date
I want to check if the difference is more than 12 ( where I mean 12 hours) to do something.
if(actual difference>12; "hello"; "bye")
But is not checking the actual difference but the serial difference
How can I check the actual difference in hours?
Dates are stored as numbers where the integer part is the number of days since 1899-12-31. The fractional part measures the time within a day. So, 24 * (now() - date) will give you the number of hours elapsed.
NB: the formatting is only a question of display and won't influence what's done by the formulas.
In order to check conditionaly the difference in the hours unit between two times we can do if(hour(actual difference)>12; "hello"; "bye")
We put the function hour() as noted in
https://support.office.com/en-us/article/calculate-the-difference-between-two-times-e1c78778-749b-49a3-b13e-737715505ff6

Excel units of time conversion

I need to change a value of time from days:hours:minutes, into either hours with a decimal or minutes. My data comes up as 001:05:46 for example. I am having trouble with the leading zeros confusing excel. Any help would be great!
Assuming that your value to parse is formatted in DDD:HH:MM like 001:05:46... There are a lot of ways to do this but here's a simple one. To convert into hours we need to take the days times 24 hours per day, add the hours, and add the minutes times 1 hour per 60 minutes:
=LEFT(A1,3)*24+MID(A1,5,2)+RIGHT(A1,2)/60
To get this value in terms of minutes we multiply by 60 minutes per hour. A possible modification of the original formula to reach this point would be:
=LEFT(A1,3)*24*60+MID(A1,5,2)*60+RIGHT(A1,2)

How to get the difference in minutes between two dates in Microsoft Excel?

I am doing some work in Excel and am running into a bit of a problem. The instruments I am working with save the date and the time of the measurements and I can read this data into Excel with the following format:
A B
1 Date: Time:
2 12/11/12 2:36:25
3 12/12/12 1:46:14
What I am looking to do is find the difference in the two date/time stamps in mins so that I can create a decay curve from the data. So In Excel, I am looking to Make this (if the number of mins in this example is wrong I just calculated it by hand quickly):
A B C
1 Date: Time: Time Elapsed (Minutes)
2 12/11/12 2:36:25 -
3 12/12/12 1:46:14 1436.82
I Have looked around for a bit and found several methods for the difference in time but they always assume that the dates are the same. I exaggerated the time between my measurements some but that roll over of days is what is causing me grief. Any suggestions or hints as to how to go about this would be great. Even If I could find the difference between the date and times in hrs or days in a decimal format, I could just multiple by a constant to get my answer. Please note, I do have experience with programming and Excel but please explain in details. I sometimes get lost in steps.
time and date are both stored as numerical, decimal values (floating point actually). Dates are the whole numbers and time is the decimal part (1/24 = 1 hour, 1/24*1/60 is one minute etc...)
Date-time difference is calculated as:
date2-date1
time2-time1
which will give you the answer in days, now multiply by 24 (hours in day) and then by 60 (minutes in hour) and you are there:
time elapsed = ((date2-date1) + (time2-time1)) * 24 * 60
or
C3 = ((A3-A2)+(B3-B2))*24*60
To add a bit more perspective, Excel stores date and times as serial numbers.
Here is a Reference material to read up.
I would suggest you to use the following:
Combine date to it's time and then do the difference. So it will not cause you any issues of next day or anything.
Please refer to the image with calculations. You may leave your total minutes cell as general or number format.
MS EXCEL Article: Calculate the difference between two times
Example as per this article
Neat way to do this is:
=MOD(end-start,1)*24
where start and end are formatted as "09:00" and "17:00"
Midnight shift
If start and end time are on the same day the MOD function does not affect anything. If the end time crosses midnight, and the end is earlier then start (say you start 23PM and finish 1AM, so result is 2 hours), the MOD function flips the sign of the difference.
Note that this formula calculates the difference between two times (actually two dates) as decimal value. If you want to see the result as time, display the result as time (ctrl+shift+2).
https://exceljet.net/formula/time-difference-in-hours-as-decimal-value
get n day between two dates, by using days360 function =days360(dateA,dateB)
find minute with this formula using timeA as reference =(timeB-$timeA+n*"24:00")*1440
voila you get minutes between two time and dates
I think =TEXT(<cellA> - <cellB>; "[h]:mm:ss") is a more concise answer. This way, you can have your column as a datetime.

How to mathematically extract milliseconds, seconds and minutes from a serial date with an Excel-formula?

How can one calculate the seconds in a Excel serial date/time, linke in the example below, without the use of the SECOND() function which (I believe) rounds or cell-formatting? How can i extend this for minutes?
The serial values for the bottom example below (last row in the image) are:
Right: 41165.4444365394
Left: 41165.4444321412
The above example is being conditional formatted with the below two formula (With stop if true turned on, and order of precedence shown).
Seems to me that the second function cannot see the difference between 10:39:58 and 10:39:59, hence is not matching the 'Display only seconds' resolution one, and is carrying on to the 'Display milliseconds resolution' given that the calculation I have for milliseconds works fine.
To see if the seconds are different, first: =SECOND($B2)<>SECOND($C2)
To see if only milliseconds have passed between the two times:
=ROUND(($B2*86400-INT($B2*86400))*1000,0)<>ROUND(($C2*86400-INT($C2*86400))*1000,0)
What am I to multiply the serial number against to provide the unrounded seconds and minutes (seperately)?
Try using FLOOR function to differentiate, i.e.
=FLOOR($B2,"0:00:01")<>FLOOR($C2,"0:00:01")
This will also distinguish between times when, say, the seconds are the same but the minutes are different.
Edit: this will do the same
=INT($B2*86400)<>INT($C2*86400)
You were almost there, try it with this:
B2 = 41165.4444365394
C2 = 41165.4444321412
=(VALUE(TEXT(B2,"ss.000"))-ROUND(MOD(B2*86400,INT(B2*86400)),3))<>(VALUE(TEXT(C2,"ss.000"))-ROUND(MOD(C2*86400,INT(C2*86400)),3)
VALUE(TEXT(B2,"ss.000")) -> gives you 59,317
VALUE(TEXT(C2,"ss.000")) -> gives you 58,937
MOD(B2*86400,INT(B2*86400))
-> is more appropriate here than substracting, but basically the same thing
edit: using only math
i am not 100% sure about this, but it is not as straight forward with the time-values as it was for millisecs, and this is why:
excel interprets a value like 1.00001 as the January 1. 1900 00:00:01.
the part before . is the date, the part after is the time.
unfortunately time runs between .00000 and .99999, but your average day has only 86400 seconds - so 0.0000115740740740741 is the factor between them.
By dividing 0.00038 with this factor or multiplying it with 86400 you get 32.832 - which rounds to 33 seconds, as excel would do. You can use this to get the number of seconds in the given time.
edit:
here is my end solution for now
=INT(MOD(B2,INT(B2))/0.0000115740740740741))
this will transform you any time into seconds, so that you can compare by them without text formats - like this:
=INT(MOD(B2,INT(B2))/0.0000115740740740741))<>INT(MOD(C2,INT(C2))/0,0000115740740740741))
you don't have to worry about the ms, they will cut off by INT.
oh, and here is my source, that gave me the right clue:
http://support.microsoft.com/kb/214094/EN-US
edit thanks to barry houdini, I'll add some additional informations:
=INT(MOD(B2,INT(B2))/0.0000115740740740741)
=INT(MOD(B2,INT(B2))*86400)
=INT(MOD(B2,1)*86400)
-> 38399 seconds of the day, without ms
-> shows only time differences regardless of date
=MOD(B2,1)*86400
-> 38399.317 seconds of the day, with ms
=INT(B2*86400)
-> 3556697399 seconds since 1.1.1900
-> shows time & date differences
=INT(MOD(B2*24*60*60,60)) (=INT(MOD(B2*86400,60)))
-> 59 seconds, regardless of time & date, only the current seconds part
=INT(MOD(B2*24*60,60))
-> 39 minutes
=INT(MOD(B2*24,60))
-> 10 hours

Resources