Я пытаюсь сделать то же самое сам. Вместо того, чтобы строить массив всех стран, как насчет использования регулярных выражений для определения формата?
setlocale(LC_TIME, "us_US");
// returns 'mdy'
$type1 = getDateFormat();
setlocale(LC_TIME, "fi_FI");
// returns 'dmy'
$type2 = getDateFormat();
setlocale(LC_TIME, "hu_HU");
// returns 'ymd'
$type3 = getDateFormat();
/**
* @return string
*/
function getDateFormat()
{
$patterns = array(
'/11\D21\D(1999|99)/',
'/21\D11\D(1999|99)/',
'/(1999|99)\D11\D21/',
);
$replacements = array('mdy', 'dmy', 'ymd');
$date = new \DateTime();
$date->setDate(1999, 11, 21);
return preg_replace($patterns, $replacements, strftime('%x', $date->getTimestamp()));
}