cancel
Showing results for 
Search instead for 
Did you mean: 
Reply

Convert Excel date value

Hi,

I get a date value from Excel in the form 43201 as an example.

How can I make a date value out of this number that I can use in a condition to evaluate whether this date is less or greater than the current date?

Would be great if somebody could help.

Best regards,

Ludwig 

15 REPLIES 15
Community Support
Community Support

Hi @ lreinhard7,

 

 

Do you want to check if the value of date column in the excel table is less or greater than the current date?

I have a date column "starttime" in the excel table, and you could refer to screenshot below to create the flow to check if the value of date column in the excel table is less than the current date.

Capture.PNG

 

 

The expression in the Condition as below:

 

@less(startOfDay(items('Apply_to_each')?['endtime']), startOfDay(utcNow()))

 

The flow would run successfully as below:

Capture.PNG

 

If you would like to check if the value of date column in the excel table is  greater than the current date, you could use the expression in the condition as below:

@greater(startOfDay(items('Apply_to_each')?['endtime']), startOfDay(utcNow()))

You could refer to link below to learn more about the workflow definition language:

https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-workflow-definition-language

 

 

Regards,
Alice Zhang

I tried this using the suggestion

 

startOfDay(body('Get_a_row')?['Date'])
 
to convert a number into a date for inputing and this is the message I got:
 
InvalidTemplate. Unable to process template language expressions in action 'Create_item' inputs at line '1' and column '2369': 'In function 'startOfDay', the value provided for date time string '41796' was not valid. The datetime string must match ISO 8601 format.'.
 
So far no luck converting strings/values into dates for flow. 
Frequent Visitor

Hello, did you ever find a way to fix the way flow was reading in the values? I've got the same issue now with flow interpreteing cells that are dates as integers.

Hi, For me the following expression worked: formatDateTime(adddays('12-30-1899',int(outputs('Compose_(hold_date_from_Excel)')),'yyyy-MM-dd'),'yyyy-MM-dd') Where outputs('Compose_(hold_date_from_Excel is a compose element that holds the Excel date number. Best regards, Ludwig

Hi Ludwig,

 

I am not getting a correct output and not sure why...

designdesign

 

outputoutput

Thanks for any help you can provide.

 

Craig

Anyone figure this out? I'm having same issues....Smiley Sad


Hi!

 

After a lot of trial and error, I think I have a solution: ticks!

 

Here's how you construct a date taken from Excel Online:

add(mul(float(items('Array')?['Date']),864000000000),599264352000000000)

(I'm taking the date from a loop, but feel free to get it from elsewhere)

 

And here's how you turn today into ticks:

ticks(startOfDay(utcNow()))

(you can remove startOfDay if you care about the time, too)

 

What's going on with the first function: You take Excel's numeric date (days since 1/1/1900), e.g. 43267.234234826 as a float, then multiply it by 864000000000 to turn it into 100s of nanoseconds (i.e. ticks) and, finally, add the difference between 1/1/1900 and 1/1/0001 (in 100s of nanoseconds)

 

Frequent Visitor

Hi,

 

I am having similar issues but I'm also trying to convert the time (e.g. a serial like 43598.802997685 should read 13/05/2019 19:16). I've got the purely the date working, but can't get the time as well.

 

addDays(addDays(formatDateTime('1900-01-01T00:00:00'),int(items('Apply_to_each')?['Date'])),-2)

 

For context, I'm importing a load of stuff from an excel table into a SharePoint list.

 

Thank in advance!

Hey,

 

AddDays can only add (or substract) whole days. By using int(), you strip your date of the time (but it's mandatory for addDays().

 

Perhaps you can use the decimal part of the date number and multiply it by 24 (and get the hours), then use the new decimal part and multiply it by 60 (and get the minutes) and, finally, take the last decimal part and multiply again (and round) by 60 (to get the seconds).

For example, 43598.802997685 -> 0.802997685 * 24 = 19,27194444 -> 0,27194444 * 60 =16,3166664 -> 0,3166664 * 60 = 19.

So the whole thing would become 13/05/2019 19:16:19

 

You can use int() to get the non-decimal part, then sub() it from the initial number, then mul() it by 24/60 and so on.

It's going to get a bit long. Good luck!

 

Hi @ymaglaras 

 

You deserved a Gold star for this. Well explained the hour and minutes from Excel sheet. Well done !!!!

 

Thanks



Did I answer your question? Mark my post as a solution!

If you liked my response, please consider giving it a thumbs up


Proud to be a Flownaut!

Learn more from my blog

Power Automate Video Tutorials
Frequent Visitor

To convert excel integers to a date in flow you can use this in your expression:

 

if(empty(<insert date integers>),'',addDays('1899-12-30',int(<insert date integers>),'MM/dd/yyyy'))

I'm trying all the suggestions in this and other similar threads and nothing is working. I'm using the List Rows Present in a Table action to read an Excel file and create SP list items out of each row. I have 2 date columns in there that keep coming back as integers. I tried the if(empty... solution suggested here and the Flow ran successfully but both dates I was trying to capture just returned blank and wrote nothing to my sharepoint list. I have also tried:

 

addDays('1899-12-30',int(items('ApplyEach_Dates')?['Week-Ending']))

and

addDays('1899-12-30',float(items('ApplyEach_Dates')?['Week-Ending']))

 

Both of these threw error 'The template language function 'float' (or 'int') was invoked with a parameter that is not valid. The value cannot be converted to the target type.' 

What am I missing? My Excel columns are formatted as Short Date. Don't need any time values. Any suggestions? Thanks very much.

 

EDIT: I should mention that the Excel file being read is stored in a SharePoint Online library

Hi @RachelRig 

 

Could you please post a runtime history values of Week-Ending?

 

Thanks



Did I answer your question? Mark my post as a solution!

If you liked my response, please consider giving it a thumbs up


Proud to be a Flownaut!

Learn more from my blog

Power Automate Video Tutorials

Apologies @abm ~ This Compose expression does actually work:

 

if(empty(items('ApplyEach_Dates')?['Work Date']),'',addDays('1899-12-30',int(items('ApplyEach_Dates')?['Work Date']),'MM/dd/yyyy'))

 

I had several rows in my test Excel file. I dug in and found that somehow a couple of my individual date cells were not formatted correctly. This was odd b/c the Number Format was indeed set to "Date" and the fields were right-aligned just like the others -- but somehow they were not actually 'short dates'. When I selected all and switched them to General format, these 2 stuck out. They did not convert to integers but remained looking deceptively like dates. So they were coming in as blank and making the Flow Compose action appear to be incorrect. Many thanks to this thread for the solution.

 

Excel dates if empty.PNG

That is awsome!!! Thank you bro

Helpful resources

Announcements
Community Conference

Power Platform Community Conference

Check out the on demand sessions that are available now!

MPA Community Blog

Power Automate Community Blog

Check out the community blog page where you can find valuable learning material from community and product team members!

Top Solution Authors
Top Kudoed Authors
Users online (7,217)