varios valor sitio sirve que posee poner para pagina multilenguaje lenguaje idiomas idioma etiqueta definir con como codigo cambiar atributo php localization strtotime

php - valor - pagina multilenguaje html



strtotime con diferentes idiomas? (9)

¿Strtotime solo funciona en el idioma predeterminado en el servidor? El siguiente código debe resolverse al 11 de agosto de 2005, sin embargo, utiliza el francés "aout" en lugar del inglés "aug".

¿Alguna idea de cómo manejar esto?

<?php $date = strtotime(''11 aout 05''); echo date(''d M Y'',$date); ?>


Agregando esto como una versión extendida de la respuesta de Marco Demaio . Se agregaron días de la semana y abreviaturas de los meses:

<?php public function frenchStrtotime($date_string) { $date_string = str_replace(''.'', '''', $date_string); // to remove dots in short names of months, such as in ''janv.'', ''févr.'', ''avr.'', ... return strtotime( strtr( strtolower($date_string), [ ''janvier''=>''jan'', ''février''=>''feb'', ''mars''=>''march'', ''avril''=>''apr'', ''mai''=>''may'', ''juin''=>''jun'', ''juillet''=>''jul'', ''août''=>''aug'', ''septembre''=>''sep'', ''octobre''=>''oct'', ''novembre''=>''nov'', ''décembre''=>''dec'', ''janv''=>''jan'', ''févr''=>''feb'', ''avr''=>''apr'', ''juil''=>''jul'', ''sept''=>''sep'', ''déc''=>''dec'', ''lundi'' => ''monday'', ''mardi'' => ''tuesday'', ''mercredi'' => ''wednesday'', ''jeudi'' => ''thursday'', ''vendredi'' => ''friday'', ''samedi'' => ''saturday'', ''dimanche'' => ''sunday'', ] ) ); }


Como se menciona strtotime no tiene en cuenta la configuración regional. Sin embargo, podría usar strptime (consulte http://ca1.php.net/manual/en/function.strptime.php ), ya que según los documentos:

Month and weekday names and other language dependent strings respect the current locale set with setlocale() (LC_TIME).

Tenga en cuenta que, dependiendo de su sistema, configuración regional y codificación, deberá tener en cuenta los caracteres acentuados.


De los docs

Parse sobre cualquier descripción textual de fecha y hora en inglés en una marca de tiempo Unix

Editar: Seis años en el camino ahora, y lo que se suponía que era una nota al margen de por qué strtotime () era una solución inapropiada para el tema en cuestión se convirtió en la respuesta aceptada 😲

Para responder mejor a la pregunta real, quiero date_create_from_format eco de la respuesta de Marc B: a pesar de los date_create_from_format , date_create_from_format , junto con un intérprete de mes personalizado proporcionará la solución más confiable

Sin embargo, parece que todavía no hay una bala de plata para el análisis de fecha internacional incorporado a PHP por el momento.


Depende de la configuración regional. Si tuviera que verificar todos los idiomas para cada análisis, tomaría casi FOREVER analizar incluso las cadenas de fecha más simples.

Si tiene una cadena con formato conocido, considere usar date_create_from_format() , que será mucho más eficiente y menos errores de impresión


Escribí una función simple que resuelve parcialmente este problema. No funciona como un strtotme completo () , pero determina la cantidad de meses en las fechas.

<?php // For example, I get the name of the month from a // date "1 January 2015" and set him (with different languages): echo month_to_number(''January'').PHP_EOL; // returns "01" (January) echo month_to_number(''Января'', ''ru_RU'').PHP_EOL; // returns "01" (January) echo month_to_number(''Мая'', ''ru_RU'').PHP_EOL; // returns "05" (May) echo month_to_number(''Gennaio'', ''it_IT'').PHP_EOL; // returns "01" (January) echo month_to_number(''janvier'', ''fr_FR'').PHP_EOL; // returns "01" (January) echo month_to_number(''Août'', ''fr_FR'').PHP_EOL; // returns "08" (August) echo month_to_number(''Décembre'', ''fr_FR'').PHP_EOL; // returns "12" (December)

Del mismo modo, podemos proceder a determinar los números y los días de la semana, etc.

Función:

<?php function month_to_number($month, $locale_set = ''ru_RU'') { $month = mb_convert_case($month, MB_CASE_LOWER, ''UTF-8''); $month = preg_replace(''/я$/'', ''й'', $month); // fix for ''ru_RU'' $locale = setlocale(LC_TIME, ''0''); setlocale(LC_TIME, $locale_set.''.UTF-8''); $month_number = FALSE; for ($i = 1; $i <= 12; $i++) { $time_month = mktime(0, 0, 0, $i, 1, 1970); $short_month = date(''M'', $time_month); $short_month_lc = strftime(''%b'', $time_month); if (stripos($month, $short_month) === 0 OR stripos($month, $short_month_lc) === 0) { $month_number = sprintf("%02d", $i); break; } } setlocale(LC_TIME, $locale); // return locale back return $month_number; }


Este método debería funcionar para ti usando strftime :

setlocale (LC_TIME, "fr_FR.utf8"); //Setting the locale to French with UTF-8 echo strftime(" %d %h %Y",strtotime($date));

strftime


Intente configurar la configuración regional antes de la conversión:

setlocale(LC_TIME, "fr_FR");


La clave para resolver esta pregunta es convertir las representaciones textuales extranjeras en sus contrapartes en inglés. También lo necesitaba, así que, inspirado por las respuestas ya dadas, escribí una función agradable y limpia que funcionaría para recuperar el nombre del mes en inglés.

function getEnglishMonthName($foreignMonthName,$setlocale=''nl_NL''){ setlocale(LC_ALL, ''en_US''); $month_numbers = range(1,12); foreach($month_numbers as $month) $english_months[] = strftime(''%B'',mktime(0,0,0,$month,1,2011)); setlocale(LC_ALL, $setlocale); foreach($month_numbers as $month) $foreign_months[] = strftime(''%B'',mktime(0,0,0,$month,1,2011)); return str_replace($foreign_months, $english_months, $foreignMonthName); } echo getEnglishMonthName(''juli''); // Outputs July

Puede ajustar esto para los días de la semana así como para cualquier otra configuración regional.


Las fechas del mes en francés son:

janvier février mars avril mai juin juillet août septembre octobre novembre décembre

Por lo tanto, para el caso muy específico en el que los meses están en francés, podrías usar

function myStrtotime($date_string) { return strtotime(strtr(strtolower($date_string), array(''janvier''=>''jan'',''février''=>''feb'',''mars''=>''march'',''avril''=>''apr'',''mai''=>''may'',''juin''=>''jun'',''juillet''=>''jul'',''août''=>''aug'',''septembre''=>''sep'',''octobre''=>''oct'',''novembre''=>''nov'',''décembre''=>''dec''))); }

La función de todos modos no se rompe si pasa $ date_string en inglés , porque no hará ninguna sustitución.