从西班牙语PHP的字符串中获取一天

Mar*_*ark 9 php localization date

我正在尝试:

 setlocale(LC_ALL,"es_ES");
 $string = "24/11/2014";
 $date = DateTime::createFromFormat("d/m/Y", $string);
 echo $date->format("l");
Run Code Online (Sandbox Code Playgroud)

而且我到了星期一,这是正确的,但我需要西班牙语,所以,有什么方法可以用西班牙语找回这一天吗?

Jim*_*Jim 19

从DateTime格式页面:

此方法不使用区域设置.所有输出都是英文的.

如果你需要locales,请查看strftime 示例:

setlocale(LC_ALL,"es_ES");
$string = "24/11/2014";
$date = DateTime::createFromFormat("d/m/Y", $string);
echo strftime("%A",$date->getTimestamp());
Run Code Online (Sandbox Code Playgroud)

  • 好答案。学习完此内容后,我意识到我需要在shell中执行“ locale -a”以找出正确的语言环境名称(例如“ es_ES.utf8”)。认为将其留在此处会很有用。 (2认同)

Jav*_* Ps 7

我用:

setlocale(LC_ALL, "es_ES", 'Spanish_Spain', 'Spanish');
echo iconv('ISO-8859-2', 'UTF-8', strftime("%A, %d de %B de %Y", strtotime($row['date'])));
Run Code Online (Sandbox Code Playgroud)

或者

setlocale(LC_ALL,"es_ES@euro","es_ES","esp");
Run Code Online (Sandbox Code Playgroud)

两者都有效。我必须使用iconv来避免重音中的奇怪符号,我得到了这个结果:

domingo, 09 de octubre de 2016
Run Code Online (Sandbox Code Playgroud)


Whi*_*ine 5

set_locale(LC_ALL,"es_ES@euro","es_ES","esp");
echo strftime("%A %d de %B del %Y");
Run Code Online (Sandbox Code Playgroud)

或者

function SpanishDate($FechaStamp)
{
   $ano = date('Y',$FechaStamp);
   $mes = date('n',$FechaStamp);
   $dia = date('d',$FechaStamp);
   $diasemana = date('w',$FechaStamp);
   $diassemanaN= array("Domingo","Lunes","Martes","Miércoles",
                  "Jueves","Viernes","Sábado");
   $mesesN=array(1=>"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio",
             "Agosto","Septiembre","Octubre","Noviembre","Diciembre");
   return $diassemanaN[$diasemana].", $dia de ". $mesesN[$mes] ." de $ano";
}  
Run Code Online (Sandbox Code Playgroud)


cel*_*owm 5

自 PHP 8.1.0 起,strftime弃用

另一种选择是使用IntlDateFormatter

$formatter = new \IntlDateFormatter(
    'es_ES',
    \IntlDateFormatter::LONG,
    \IntlDateFormatter::LONG,
    'Europe/Madrid' //more in: https://www.php.net/manual/en/timezones.europe.php
);

echo $formatter->formatObject(new \DateTime(), "eeee", "es_ES");
Run Code Online (Sandbox Code Playgroud)

  • 对于尝试此操作的人,您需要安装 php 的 intl 扩展并在 php.ini 文件中启用它 (2认同)