This was posted as a question on the forums a while back. I thought this was a very interesting question as dates, math and the combination of the two intrigues me.
There is a very easy way to achieve this using c# and Azure Functions:
Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
But I wanted to solve it using only Logic Apps functionality or at least see if it was possible.
How to get the value (math)
To make it work we need to use the functionality called “ticks”. Ticks are part the Windows OS and is a large number that means “the number of 100 nanoseconds that has passed since Jan 1st year 0 UTC” (western Christian calendar). Unix time is the same but is “the number of seconds that has passed since Jan 1st 1970 UTC”. These constants in time, and their relation to each other, can be used to calculate the value we need.
One second is 10 000 000 ticks.
TTN is the number of ticks from start until now. TT1970 is the number of ticks that passed from start until 1970. This constant is 621355968000000000.
The calculation looks like (TTN-TT1970) / 10 000 000.
Calculating the Unix value for “Now” (October 24th 2017 13:28) looks like
(636444485531778827 – 621355968000000000) = 15088518843498049
15088518843498049 / 10 000 000 = 1508851993
How to get the value (Logic App)
- Set up a new Logic App that can be triggered easily. I usually use a HTTP Request / Response.
- You need two variables so create to “Initialize variables”.
- Name the first TicksTo1970, set the type to Integer and set the value to ticks(‘1970-01-01’).
- Name the second TicksToNow, set the type to Integer and set the value to ticks(utcNow()).
- Now you are ready to do the calculation. If you have used a Request / Response, set the Response Body to div(sub(variables(‘TicksToNow’),variables(‘TicksTo1970’)),10000000)
- Save your flow, execute it to receive the value and validate it against https://www.unixtimestamp.com/
The flow can be downloaded here.