Resolving the Date Format Dispute
Mathematica 341 304 298 288 293 bytes
This uses a pure or anonymous function, that is, a function without its own name.
DateString returns an error message if the date is ambiguous. Checkcatches the ambiguity and sends the offending date to DateList, which transforms it into list of 3 integers (which it believes to be {year, month, day}). The month and day integers are sorted by size and used to determine the month and day as per the OP's instructions.
Quiet silences error printing.
t=StringSplit;v=ToString;x=t[#,&quot;-&quot;]&amp;/@t[&quot;Janu-ary Febr-uary Mar-ch Apr-il Ma-y Ju-ne Ju-ly Aug-ust Septe-mber Octo-ber Nove-mber Dece-mber&quot;];
Quiet@Check[#~DateString~{&quot;MonthName&quot;,&quot; &quot;,&quot;DayShort&quot;,&quot;, &quot;,&quot;Year&quot;},
{m,n,o}=DateList@#;{p,q}=Sort@d[[2;;3]];x[[p,1]]&lt;&gt;x[[q,2]]&lt;&gt;&quot; &quot;&lt;&gt;v@Floor@Mean@{n,o}&lt;&gt;&quot;, &quot;&lt;&gt;v@d[[1]]]&amp;


t=StringSplit;v=ToString;x=t[#,&quot;-&quot;]&amp;/@t[&quot;Janu-ary Febr-uary Mar-ch Apr-il Ma-y Ju-ne Ju-ly Aug-ust Septe-mber Octo-ber Nove-mber Dece-mber&quot;];
Quiet@Check[#~DateString~{&quot;MonthName&quot;,&quot; &quot;,&quot;DayShort&quot;,&quot;, &quot;,&quot;Year&quot;},
{m,n,o}=DateList@#;{p,q}=Sort@d[[2;;3]];x[[p,1]]&lt;&gt;x[[q,2]]&lt;&gt;&quot; &quot;&lt;&gt;v@Floor@Mean@{n,o}&lt;&gt;&quot;, &quot;&lt;&gt;v@d[[1]]]&amp; /@ 
{&quot;10/31/1998&quot;,&quot;25/12/1989&quot;, &quot;10/8/2011&quot;, &quot;8/5/1957&quot;, &quot;9/12/2012&quot;, &quot;1/1/2012&quot;}


{&quot;October 31, 1998&quot;, &quot;December 25, 1989&quot;, &quot;Augber 9, 2011&quot;, &quot;Maust 6,
1957&quot;, &quot;September 10, 2012&quot;, &quot;January 1, 2012&quot;}