如何在php中将英语日期更改为西班牙语?

时间:2015-09-04 10:05:02

标签: php strftime setlocale

在我的项目中,我将英文日期保存在数据库中为'Y-m-d'。现在,我希望以2015年5月28日的格式显示西班牙语的日期。我怎么做的?我尝试了以下但无济于事。

setlocale(LC_TIME, 'spanish');
echo utf8_encode(strftime("%d %B, %Y",strtotime($date)));

当我打印setlocale时,它会返回bool(false)。还有其他方法吗?

3 个答案:

答案 0 :(得分:0)

你应该用这个:

setlocale(LC_TIME, 'es_ES');

// or (to avoid utf8_encode) : setlocale(LC_TIME, 'es_ES.UTF-8');

答案 1 :(得分:0)

我建议使用intl函数库,例如IntlDateFormatter。这将允许您输出本地化数据,而无需使用setlocale()更改全局区域设置。

Intl库还允许您查看可以使用的受支持语言环境列表var_dump(ResourceBundle::getLocales(''));

示例:https://3v4l.org/BKCRo (请注意setlocale(LC_ALL, 'es_ES')对输出的影响。

$esDate = datefmt_create('es_ES', //output locale
    \IntlDateFormatter::FULL, //date type
    \IntlDateFormatter::NONE, //time type
    'America/Los_Angeles', //time zone
    IntlDateFormatter::GREGORIAN, //calendar type
    'dd LLLL, YYYY'); //output format
echo $esDate->format(new \DateTime);

结果:

18 diciembre, 2017

有关支持的日期格式模式的列表,请参阅:http://userguide.icu-project.org/formatparse/datetime

作为setlocale()的注释,每个系统都不同,并且您的PHP和服务器操作系统的分发可能不支持所有语言环境。

使用Linux时,您可以使用控制台终端中的locale -a或PHP中的system('locale -a', $locales); var_dump($locales);来确定支持的系统区域设置。

使用Windows时,您可以导航至Control Panel->LanguageControl Panel->International Settings来查看系统支持的区域设置。 有关各种Windows版本支持的区域设置的详细信息,请参阅https://msdn.microsoft.com/en-us/library/cc233982.aspx

如果使用setlocale(),请确保在所需区域设置的数组中提供所有可能的变体,按从左到右的优先级顺序,以减少返回false的可能性。

e.g。

setlocale(LC_TIME, array('es_ES.UTF-8', 'es_ES', 'es-ES', 'es', 'spanish', 'Spanish'));

答案 2 :(得分:-2)

这应该有效:

echo date("d M, Y", strtotime($date));