在我的项目中,我将英文日期保存在数据库中为'Y-m-d'。现在,我希望以2015年5月28日的格式显示西班牙语的日期。我怎么做的?我尝试了以下但无济于事。
setlocale(LC_TIME, 'spanish');
echo utf8_encode(strftime("%d %B, %Y",strtotime($date)));
当我打印setlocale时,它会返回bool(false)。还有其他方法吗?
答案 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->Language
或Control 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));