I want to convert dates formatted like "March 30th 2017, 05:00:00.000" to an excel date value? What's the most elegant solution I can do this with using a cell-formula and not VBA?
Nested IFERROR functions can handle the variety of number ordinals.
=--SUBSTITUTE(REPLACE(A2, IFERROR(FIND("st ", A2),IFERROR(FIND("nd ", A2),IFERROR(FIND("rd ", A2), IFERROR(FIND("th ", A2), LEN(A2))))), 3, ", "), ", ", " ",2)
I used a custom number format of [Color10]mmmm dd, yyyy hh:mm:ss.000;;;[Color3]@
. Beyond the fact that the text is left-aligned and the true dates are right-aligned, this will put text-that-look-like-dates in a red font and true dates in a green font.
If you want a true date and want to drop the time part then:
=DATEVALUE(SUBSTITUTE(LEFT(A1,FIND(",",A1)-1),"th",","))
You will need to nest SUBSTITUTE() functions to handle "nd" and "st" ordinals if you have them:
=DATEVALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(LEFT(A1,FIND(",",A1)-1),"th",","),"nd",","),"st",","))
来源:https://stackoverflow.com/questions/43237071/parsing-non-standard-date-format-in-excel-cell