Reputation: 12322
There is a very simple problem. I have a locale identifier, en, en_US, cs_CZ or whatever. I just need to get the date-time format for that locale. I know I can easily format any timestamp or date object according to the locale. But I need just the string representation of the date format, let's say a regular expression. Is there any function managing this functionality? I haven't found any so far...
Exapmle:
$locale = "en_US";
$format = the_function_i_need($locale);
echo $format; // prints something like "month/day/year, hour:minute"
Upvotes: 15
Views: 39259
Reputation: 929
function getDateFormat($locale)
{
$formatter = new IntlDateFormatter($locale, IntlDateFormatter::SHORT, IntlDateFormatter::NONE);
if ($formatter === null)
throw new InvalidConfigException(intl_get_error_message());
return $formatter->getPattern();
}
Make shure you install intl.
Upvotes: 12
Reputation: 131
I'm trying to do the same thing myself. Instead of building an array of all the countries, how about using regex to determine the format?
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()));
}
Upvotes: 2
Reputation:
converted from comment:
you will have to build an array with a list of the possibilities.
http://en.wikipedia.org/wiki/Date_format_by_country should help.
post the function somewhere when done, i'm sure it would come in handy for others
Upvotes: 3
Reputation: 6709
Use strftime()
in conjunction with setlocale()
. Seems like it's what you're looking for.
Upvotes: 0