(PHP 4, PHP 5)
strftime — Formatea una fecha/hora local según la configuración regional
$format
[, int $timestamp
= time()
] )Formatea una fecha/hora local según la configuración regional. Los nombres del mes y del día de la semana y otras cadenas dependientes del lenguaje están subordinados a la configuración regional local establecida con setlocale().
No todos los especificadores de conversión están soportados por su biblioteca C, en cuyo caso no serán soportados por la fucnión strftime() de PHP. Adicionalmente, no todas las plataformas soportan marcas de tiempo negativas, por lo que el rango de fechas puede estar limitado a fechas que no sean anteriores a la época Unix. Eso significa que %e, %T, %R y, %D (y posiblemente otros) - así como las fechas anteriores al 1 Ene, 1970 - no funcionarán en Windows, en algunas distribucioes de Linux, y en otros pocos sistemas operativos. Para sistemas Windows se puede encontrar una visión general de los especificadores de conversión soportados en » MSDN.
format
format |
Descripción | Ejemplo de valores devueltos |
---|---|---|
Día | --- | --- |
%a | Una representación textual abreviada del día | Sun hasta Sat |
%A | Una representación textual completa del día | Sunday hsata Saturday |
%d | El día del mes con dos dígitos (con ceros iniciales) | 01 a 31 |
%e | El día del mes, con un espacio precediendo a los dígitos simples. No está implementado como está descrito en Windows. Véase más abajo para más información. | 1 a 31 |
%j | Día del año, 3 dígitos con ceros iniciales | 001 a 366 |
%u | Representación numérica ISO-8601 del día de la semana | 1 (para Lunes) hasta 7 (para Domingo) |
%w | Representación numérica del día de la semana | 0 (para Domingo) hasta 6 (para Sábado) |
Semana | --- | --- |
%U | Número de semana del año dado, comenzando con el primer Domingo como la primera semana | 13 (para la 13ª semana completa del año) |
%V | Número de semana ISO-8601:1988 del año dado, comenzando con la primera semana del año con al menos 4 días de semana, con Lunes siendo el principio de la semana | 01 hasta 53 (donde 53 cuenta para una semana solapada) |
%W | Una representación numérica de la semana del año, comenzando con el primer Domingo como la primera semana | 46 (para la 46ª semana del año comenzando con un Lunes) |
Mes | --- | --- |
%b | Nombre del mes abreviado, basado en la configuración regional | Jan hasta Dec |
%B | Nombre del mes completo, basado en la configuración regional | January hasta December |
%h | Nombre del mes abreviado, basado en la configuración regional (un alias de %b) | Jan hasta Dec |
%m | Representación de dos dígitos del mes | 01 (para Enero) hasta 12 (para Diciembre) |
Año | --- | --- |
%C | Representación de dos dígitos del siglo (año dividido entre 100, truncado a un integer) | 19 para el Siglo XX |
%g | Representación de dos dígitos del año por el estándar ISO-8601:1988 (véase %V) | Ejemplo: 09 para la semana del 6 de Enero de 2009 |
%G | La versión de cuatro dígitos completa de %g | Ejemplo: 2008 para la semana del 3 de Enero de 2009 |
%y | Representación de dos dígitos del año | Ejemplo: 09 para 2009, 79 para 1979 |
%Y | Representación de cuatro dígitos del año | Ejemplo: 2038 |
Hora | --- | --- |
%H | Representación de dos dígitos de la hora en formato de 24 horas | 00 hasta 23 |
%k | Representación de dos dígitos de la hora en formato 24 horas, con un espacio precediendo a los dígitos simples | 0 hasta 23 |
%I | Representación de dos dígitos de la hora en formato de 12 horas | 01 hasta 12 |
%l ('L' minúscula) | La hora en formato de 12 horas, con un espacio precediendo a los dígitos simples | 1 hasta 12 |
%M | Representación de dos dígitos de los minutos | 00 hasta 59 |
%p | 'AM' o 'PM' en MAYÚSCULAS basados en la hora dada | Ejemplo: AM para 00:31, PM para 22:23 |
%P | 'am' o 'pm' en minúsculas basados en la hora dada | Ejemplo: am para 00:31, pm para 22:23 |
%r | Lo mismo que "%I:%M:%S %p" | Ejemplo: 09:34:17 PM para 21:34:17 |
%R | Lo mismo que "%H:%M" | Ejemplo: 00:35 para 12:35 AM, 16:44 para 4:44 PM |
%S | Representación de dos dígitos de los segundos | 00 hasta 59 |
%T | Lo mismo que "%H:%M:%S" | Ejemplo: 21:34:17 para 09:34:17 PM |
%X | Representación preferida de la hora basda en la configuración regional, sin la fecha | Ejemplo: 03:59:16 o 15:59:16 |
%z | El índice de la zona horaria. No implementado como está descrito en Windows. Véase más abajo para más información. | Ejemplo: -0500 para Hora del Este de EEUU |
%Z | La abreviatura de la zona horaria No implementado como está descrito en Windows. Véase más abajo para más información. | Ejemplo: EST para Hora del Este |
Marcas de Fecha y Hora | --- | --- |
%c | Marca preferida de la fecha y hora basadas en la configuración regional | Ejemplo: Tue Feb 5 00:45:10 2009 para el 5 de Febrero de 2009 a las 12:45:10 AM |
%D | Lo mismo que "%m/%d/%y" | Ejemplo: 02/05/09 para el 5 de Febrero de 2009 |
%F | Lo mismo que "%Y-%m-%d" (normalmente usado en las marcas de fecha de bases de datos) | Ejemplo: 2009-02-05 para el 5 de Febrero de 2009 |
%s | Marca de tiempo del momento de la Época Unix (lo mismo que la función time()) | Ejemplo: 305815200 para el 10 de Septiembre de 1979 08:40:00 AM |
%x | Representación preferida de la fecha basda en la configuración local, sin la hora | Ejemplo: 02/05/09 para el 5 de Febrero de 2009 |
Miscelánea | --- | --- |
%n | Un carácter de nueva línea ("\n") | --- |
%t | Un carácter de tabulación ("\t") | --- |
%% | Un carácter literal de porcentaje ("%") | --- |
La longitud máxima de este parámetro es de 1023 caracteres.
A diferencia de ISO-9899:1999, Sun Solaris comienza con el Domingo como 1. Como resultado, %u podría no funcionar como está descrito en este manual.
Solamente Windows:
El modificador %e no está soportado en la implementación de Windows de esta función. Para obtener este valor se puede usar en su lugar el modificador %#d. El ejemplo de abajo ilustra cómo escribir una función compatible multiplataforma.
Los modificadores %z y %Z devuelven el nombre de la zona horaria en lugar del índice o de la abreviatura.
Solamente Mac OS X: El modificador %P no está soportado en la implementación de Mac OS X de esta función.
timestamp
El parámetro opcional timestamp
es una marca de tiempo Unix de tipo
integer que por defecto es la hora local si no se proporciona
ningún valor a timestamp
. En otras palabras,
es por defecto el valor de la función time().
Devuelve una cadena formateada según format
usando el parámetro timestamp
dado o el momento
actual local si no se da la marca de tiempo. Los nombres del
mes y del día de la semana y otras cadenas dependientes del lenguaje están subordinados
a la configuración regional local establecida con setlocale().
Cada vez que se llame a la función date/time se generará un E_NOTICE
si la zona horaria no es válida, y/o un mensaje E_STRICT
o E_WARNING
si se usa la configuración del sistema o la variable global
TZ. Vea también date_default_timezone_set()
Ya que la salida depende de la biblioteca C subyacente, algunos especificadores
de conversión no están soportados. En Windows, proporcionar especificadores de
conversión desconocidos resultará en 5 mensajes E_WARNING
y
devolverá FALSE
. En otros sistemas operativos puede no obtenerse ningún
mensaje E_WARNING
y la salida contener los
especificadores de conversión no convertidos.
Versión | Descripción |
---|---|
5.1.0 |
Ahora muestra |
Este ejemplo funcionará si tiene instalada en su sistema la configuración regional respectiva.
Ejemplo #1 Ejemplos de configuraciones regionales con strftime()
<?php
setlocale(LC_TIME, "C");
echo strftime("%A");
setlocale(LC_TIME, "fi_FI");
echo strftime(" en Finlandés es %A,");
setlocale(LC_TIME, "fr_FR");
echo strftime(" en Francés %A y");
setlocale(LC_TIME, "de_DE");
echo strftime(" en Alemán %A.\n");
?>
Ejemplo #2 Ejemplo de número de semana con ISO 8601:1988
<?php
/* Diciembre 2002 / Enero 2003
ISO L M X J V S D
--- ----------------------------
51 16 17 18 19 20 21 22
52 23 24 25 26 27 28 29
1 30 31 1 2 3 4 5
2 6 7 8 9 10 11 12
3 13 14 15 16 17 18 19 */
// Imprime: 12/28/2002 - %V,%G,%Y = 52,2002,2002
echo "12/28/2002 - %V,%G,%Y = " . strftime("%V,%G,%Y", strtotime("12/28/2002")) . "\n";
// Imprime: 12/30/2002 - %V,%G,%Y = 1,2003,2002
echo "12/30/2002 - %V,%G,%Y = " . strftime("%V,%G,%Y", strtotime("12/30/2002")) . "\n";
// Imprime: 1/3/2003 - %V,%G,%Y = 1,2003,2003
echo "1/3/2003 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/3/2003")) . "\n";
// Imprime: 1/10/2003 - %V,%G,%Y = 2,2003,2003
echo "1/10/2003 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/10/2003")) . "\n";
/* Diciembre 2004 / Enero 2005
ISO L M X J V S D
--- ----------------------------
51 13 14 15 16 17 18 19
52 20 21 22 23 24 25 26
53 27 28 29 30 31 1 2
1 3 4 5 6 7 8 9
2 10 11 12 13 14 15 16 */
// Imprime: 12/23/2004 - %V,%G,%Y = 52,2004,2004
echo "12/23/2004 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("12/23/2004")) . "\n";
// Imprime: 12/31/2004 - %V,%G,%Y = 53,2004,2004
echo "12/31/2004 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("12/31/2004")) . "\n";
// Imprime: 1/2/2005 - %V,%G,%Y = 53,2004,2005
echo "1/2/2005 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/2/2005")) . "\n";
// Imprime: 1/3/2005 - %V,%G,%Y = 1,2005,2005
echo "1/3/2005 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/3/2005")) . "\n";
?>
Ejemplo #3 Ejemplo compatible de multi-plataforma usando del modificador %e
<?php
// Jan 1: resulta en: '%e%1%' (%%, e, %%, %e, %%)
$format = '%%e%%%e%%';
// Comprobación para Windows para hallar y remplazar el
// modificador %e adecuadamente
// el modificador %e si existen en el formato
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
$format = preg_replace('#(?<!%)((?:%%)*)%e#', '\1%#d', $format);
}
echo strftime($format);
?>
Ejemplo #4 Mostrar todos los formatos conocidos y desconocidos.
<?php
// Describe los formatos.
$strftimeFormats = array(
'A' => 'Una representación textual completa del día',
'B' => 'Nombre del mes completo, basado en la configuración regional',
'C' => 'Representación de dos dígitos del siglo (año dividido entre 100, truncado a un integer)',
'D' => 'Lo mismo que "%m/%d/%y"',
'E' => '',
'F' => 'Lo mismo que "%Y-%m-%d"',
'G' => 'La versión de cuatro dígitos completa de %g',
'H' => 'Representación de dos dígitos de la hora en formato de 24 horas',
'I' => 'Representación de dos dígitos de la hora en formato de 12 horas',
'J' => '',
'K' => '',
'L' => '',
'M' => 'Representación de dos dígitos de los minutos',
'N' => '',
'O' => '',
'P' => ''am' o 'pm' en minúsculas basados en la hora dada',
'Q' => '',
'R' => 'Lo mismo que "%H:%M',
'S' => 'Representación de dos dígitos de los segundos',
'T' => 'Lo mismo que "%H:%M:%S"',
'U' => 'Número de semana del año dado, comenzando con el primer Domingo como la primera semana',
'V' => 'Número de semana ISO-8601:1988 del año dado, comenzando con la primera semana del año con al menos 4 días de semana, con Lunes siendo el principio de la semana',
'W' => 'Una representación numérica de la semana del año, comenzando con el primer Domingo como la primera semana',
'X' => 'Representación preferida de la hora basda en la configuración regional, sin la fecha',
'Y' => 'Representación de cuatro dígitos del año',
'Z' => 'La opción de índice/abreviatura de la zona horaria NO dada por %z (depende del sistema operativo)',
'a' => 'Una representación textual abreviada del día',
'b' => 'Nombre del mes abreviado, basado en la configuración regional',
'c' => 'Marca preferida de la fecha y hora basadas en la configuración regional',
'd' => 'El día del mes con dos dígitos (con ceros iniciales)',
'e' => 'El día del mes, con un espacio precediendo a los dígitos simples',
'f' => '',
'g' => 'Representación de dos dígitos del año por el estándar ISO-8601:1988 (véase %V)',
'h' => 'Nombre del mes abreviado, basado en la configuración regional (un alias de %b)',
'i' => '',
'j' => 'Día del año, 3 dígitos con ceros iniciales',
'k' => 'La hora en formato de 24 horas, con un espacio precediendo a los dígitos simples',
'l' => 'La hora en formato de 12 horas, con un espacio precediendo a los dígitos simples',
'm' => 'Representación de dos dígitos del mes',
'n' => 'Un carácter de nueva línea ("\n")',
'o' => '',
'p' => ''AM' o 'PM' en MAYÚSCULAS basados en la hora dada',
'q' => '',
'r' => 'Lo mismo que "%I:%M:%S %p"',
's' => 'Marca de tiempo del momento de la Época Unix',
't' => 'Un carácter de tabulación ("\t")',
'u' => 'Representación numérica ISO-8601 del día de la semana',
'v' => '',
'w' => 'Representación numérica del día de la semana',
'x' => 'Representación preferida de la fecha basda en la configuración local, sin la hora',
'y' => 'Representación de dos dígitos del año',
'z' => 'El índice de la zona horaria de UTC o la abreviatura (depende del sistema operativo)',
'%' => 'Un carácter de porcentaje literal ("%")',
);
// Resultados.
$strftimeValues = array();
// Evalúa los formatos, mientras suprime cualquier error.
foreach($strftimeFormats as $format => $description){
if (False !== ($value = @strftime("%{$format}"))){
$strftimeValues[$format] = $value;
}
}
// Encuentra el valor más largo.
$maxValueLength = 2 + max(array_map('strlen', $strftimeValues));
// Reporta los formatos conocidos.
foreach($strftimeValues as $format => $value){
echo "Formato conocido : '{$format}' = ", str_pad("'{$value}'", $maxValueLength), " ( {$strftimeFormats[$format]} )\n";
}
// Reporta los formatos desconocidos.
foreach(array_diff_key($strftimeFormats, $strftimeValues) as $format => $description){
echo "Formato desconocido : '{$format}' ", str_pad(' ', $maxValueLength), ($description ? " ( {$description} )" : ''), "\n";
}
?>
El resultado del ejemplo sería algo similar a:
Formato conocido : 'A' = 'Friday' ( Una representación textual completa del día ) Formato conocido : 'B' = 'December' ( Nombre del mes completo, basado en la configuración regional ) Formato conocido : 'H' = '11' ( Representación de dos dígitos de la hora en formato de 24 horas ) Formato conocido : 'I' = '11' ( Representación de dos dígitos de la hora en formato de 12 horas ) Formato conocido : 'M' = '24' ( Representación de dos dígitos de los minutos ) Formato conocido : 'S' = '44' ( Representación de dos dígitos de los segundos ) Formato conocido : 'U' = '48' ( Número de semana del año dado, comenzando con el primer Domingo como la primera semana ) Formato conocido : 'W' = '48' ( Una representación numérica de la semana del año, comenzando con el primer Domingo como la primera semana ) Formato conocido : 'X' = '11:24:44' ( Representación preferida de la hora basda en la configuración regional, sin la fecha ) Formato conocido : 'Y' = '2010' ( Representación de cuatro dígitos del año ) Formato conocido : 'Z' = 'GMT Standard Time' ( La opción de índice/abreviatura de la zona horaria NO dada por %z (depende del sistema operativo) ) Formato conocido : 'a' = 'Fri' ( Una representación textual abreviada del día ) Formato conocido : 'b' = 'Dec' ( Nombre del mes abreviado, basado en la configuración regional ) Formato conocido : 'c' = '12/03/10 11:24:44' ( Marca preferida de la fecha y hora basadas en la configuración regional ) Formato conocido : 'd' = '03' ( El día del mes con dos dígitos (con ceros iniciales) ) Formato conocido : 'j' = '337' ( Día del año, 3 dígitos con ceros iniciales ) Formato conocido : 'm' = '12' ( Representación de dos dígitos del mes ) Formato conocido : 'p' = 'AM' ( 'AM' o 'PM' en MAYÚSCULAS basados en la hora dada ) Formato conocido : 'w' = '5' ( Representación numérica del día de la semana ) Formato conocido : 'x' = '12/03/10' ( Representación preferida de la fecha basda en la configuración local, sin la hora ) Formato conocido : 'y' = '10' ( Representación de dos dígitos del año ) Formato conocido : 'z' = 'GMT Standard Time' ( El índice de la zona horaria de UTC o la abreviatura (depende del sistema operativo) ) Formato conocido : '%' = '%' ( Un carácter de porcentaje literal ("%") ) Formato desconocido : 'C' ( Representación de dos dígitos del siglo (año dividido entre 100, truncado a un integer) ) Formato desconocido : 'D' ( Lo mismo que "%m/%d/%y" ) Formato desconocido : 'E' Formato desconocido : 'F' ( Lo mismo que "%Y-%m-%d" ) Formato desconocido : 'G' ( La versión de cuatro dígitos completa de %g ) Formato desconocido : 'J' Formato desconocido : 'K' Formato desconocido : 'L' Formato desconocido : 'N' Formato desconocido : 'O' Formato desconocido : 'P' ( 'am' o 'pm' en minúsculas basados en la hora dada ) Formato desconocido : 'Q' Formato desconocido : 'R' ( Lo mismo que "%H:%M ) Formato desconocido : 'T' ( Lo mismo que "%H:%M:%S" ) Formato desconocido : 'V' ( Número de semana ISO-8601:1988 del año dado, comenzando con la primera semana del año con al menos 4 días de semana, con Lunes siendo el principio de la semana ) Formato desconocido : 'e' ( El día del mes, con un espacio precediendo a los dígitos simples ) Formato desconocido : 'f' Formato desconocido : 'g' ( Representación de dos dígitos del año por el estándar ISO-8601:1988 (véase %V) ) Formato desconocido : 'h' ( Nombre del mes abreviado, basado en la configuración regional (un alias de %b) ) Formato desconocido : 'i' Formato desconocido : 'k' Formato desconocido : 'l' ( La hora en formato de 12 horas, con un espacio precediendo a los dígitos simples ) Formato desconocido : 'n' ( Un carácter de nueva línea ("\n") ) Formato desconocido : 'o' Formato desconocido : 'q' Formato desconocido : 'r' ( Lo mismo que "%I:%M:%S %p" ) Formato desconocido : 's' ( Marca de tiempo del momento de la Época Unix ) Formato desconocido : 't' ( Un carácter de tabulación ("\t") ) Formato desconocido : 'u' ( Representación numérica ISO-8601 del día de la semana ) Formato desconocido : 'v'
Nota: %G y %V, que están basados en el número de semana ISO 8601:1988, pueden dar resultados inesperados (aunque correctos) si el sistema numérico no se entendió perfectamente. Véase los ejemplos de %V en esta página del manual.