Creando y manejando fechas con PHP -date
A continuación veremos como usar la función date de PHP y como darle formato a esta para ser mostrada.
contenido:
Introducción
https://blastcoding.com/creando-y-manejando-fechas-con-php-date/#introduccionEn PHP podemos tanto crear como dar formato a una fecha con la función date()
.
Su sintaxis es la siguiente:
date ( string $format [, int $timestamp = time() ] ) : string
Cómo puede ver en la función date
tenemos 2 parámetros 1 opcional y nos retorna un string de regreso.
$format
define el formato que tendrá nuestra fecha, por ejemplo día-mes-año
$timestamp
sería un valor timestamp UNIX el cual es la fecha, si no se le pasa este parámetro tomará el valor por defecto el cual usa la función time().
La función time()
devuelve el valor actual de la fecha UNIX, tome en cuenta que esta fecha no es la fecha de su usuario, es la fecha del servidor.
Formatos
https://blastcoding.com/creando-y-manejando-fechas-con-php-date/#formatosExplicado esto veamos los formatos para el primer parámetro:
Carácter de format | Descripción | Ejemplo de valores devueltos |
---|---|---|
Día | — | — |
d | Día del mes, 2 dígitos con ceros iniciales | 01 a 31 |
D | Una representación textual de un día, tres letras | Mon hasta Sun |
j | Día del mes sin ceros iniciales | 1 a 31 |
l (‘L’ minúscula) | Una representación textual completa del día de la semana | Sunday hasta Saturday |
N | Representación numérica ISO-8601 del día de la semana (añadido en PHP 5.1.0) | 1 (para lunes) hasta 7 (para domingo) |
S | Sufijo ordinal inglés para el día del mes, 2 caracteres | st, nd, rd o th. Funciona bien con j |
w | Representación numérica del día de la semana | 0 (para domingo) hasta 6 (para sábado) |
z | El día del año (comenzando por 0) | 0 hasta 365 |
Semana | — | — |
W | Número de la semana del año ISO-8601, las semanas comienzan en lunes | Ejemplo: 42 (la 42ª semana del año) |
Mes | — | — |
F | Una representación textual completa de un mes, como January o March | January hasta December |
m | Representación numérica de una mes, con ceros iniciales | 01 hasta 12 |
M | Una representación textual corta de un mes, tres letras | Jan hasta Dec |
n | Representación numérica de un mes, sin ceros iniciales | 1 hasta 12 |
t | Número de días del mes dado | 28 hasta 31 |
Año | — | — |
L | Si es un año bisiesto | 1 si es bisiesto, 0 si no. |
o | Año según el número de la semana ISO-8601. Esto tiene el mismo valor que Y, excepto que si el número de la semana ISO (W) pertenece al año anterior o siguiente, se usa ese año en su lugar. (añadido en PHP 5.1.0) | Ejemplos: 1999 o 2003 |
Y | Una representación numérica completa de un año, 4 dígitos | Ejemplos: 1999 o 2003 |
y | Una representación de dos dígitos de un año | Ejemplos: 99 o 03 |
Hora | — | — |
a | Ante meridiem y Post meridiem en minúsculas | am o pm |
A | Ante meridiem y Post meridiem en mayúsculas | AM o PM |
B | Hora Internet | 000 hasta 999 |
g | Formato de 12 horas de una hora sin ceros iniciales | 1 hasta 12 |
G | Formato de 24 horas de una hora sin ceros iniciales | 0 hasta 23 |
h | Formato de 12 horas de una hora con ceros iniciales | 01 hasta 12 |
H | Formato de 24 horas de una hora con ceros iniciales | 00 hasta 23 |
i | Minutos con ceros iniciales | 00 hasta 59 |
s | Segundos con ceros iniciales | 00 hasta 59 |
u | Microsegundos (añadido en PHP 5.2.2). Observe que date() siempre generará 000000 ya que toma un parámetro de tipo integer , mientras que DateTime::format() admite microsegundos si DateTime fue creado con microsegundos. | Ejemplo: 654321 |
v | Milisegundos (añadido en PHP 7.0.0). La misma observación se aplica para u. | Example: 654 |
Zona Horaria | — | — |
e | Identificador de zona horaria (añadido en PHP 5.1.0) | Ejemplos: UTC, GMT, Atlantic/Azores |
I (i mayúscula) | Si la fecha está en horario de verano o no | 1 si está en horario de verano, 0 si no. |
O | Diferencia de la hora de Greenwich (GMT) en horas | Ejemplo: +0200 |
P | Diferencia con la hora de Greenwich (GMT) con dos puntos entre horas y minutos (añadido en PHP 5.1.3) | Ejemplo: +02:00 |
T | Abreviatura de la zona horaria | Ejemplos: EST, MDT … |
Z | Índice de la zona horaria en segundos. El índice para zonas horarias al oeste de UTC siempre es negativo, y para aquellas al este de UTC es siempre positivo. | -43200 hasta 50400 |
Fecha/Hora Completa | — | — |
c | Fecha ISO 8601 (añadido en PHP 5) | 2004-02-12T15:19:21+00:00 |
r | Fecha con formato » RFC 2822 | Ejemplo: Thu, 21 Dec 2000 16:01:07 +0200 |
U | Segundos desde la Época Unix (1 de Enero del 1970 00:00:00 GMT) | Vea también time() |
Ejemplo de uso de Formatos
La tabla anterior es tal cual una referencia a la tabla que hay en la página de PHP.
Ejemplos de la función date()<?php echo "<h1>Ejemplos con date</h1>"; echo "<p>con formato dia mes año</p>"; echo date("d-m-y"); echo "</br>"; echo date("d-m-Y"); echo "<p>Un ejemplo con timestamp:</p>"; echo date("d-m-Y",0); echo "<h2>Manejando horarios</h2>"; echo "<p>hora de ahora</p>"; echo "<p>Horas de 0 a 23</p>"; echo date("H:i:s"); echo "<p>Horas de 0 a 12</p>"; echo date("h:i:s"); echo "<p>Algo más complejo</p>"; echo date("l d, F Y H:i:s"); ?>
Como puede ver tanto el .
,
, -
, /
, el espacio nos dice como estará separado el formato. Un ejemplo más para hacer esto más evidente:
echo date("l:. d:. F:. Y:.");
¿Qué es el Timestamp?
https://blastcoding.com/creando-y-manejando-fechas-con-php-date/#timestampAntes de terminar el tema de la función date vea que en el ejemplo en el que le paso la fecha timestamp nos dará la fecha 31-12-1969.
Esto es el tiempo UNIX:
Tiempo Unix o Tiempo POSIX es un sistema para la descripción de instantes de tiempo: se define como la cantidad de segundos transcurridos desde la medianoche UTC del 1 de enero de 1970
wikipedia
En otras palabras, la primera fecha será 1.º de 1970 locación griwich. Más concretamente seria Date (UTC)Jan 1, 1970, 00:00:00
Hagamos 2 últimos ejemplo con esta fecha.
echo date("d-m-Y H:i:s",0); echo date("d-m-Y H:i:s",1);
Porque el ejemplo no da el día correcto, pues eso depende de la zona horaria, si le ponemos que sea la zona horaria de Londres nos debería dar la fecha correcta.
Esto lo podemos hacer con la función date_default_timezone_set('UTC');
date_default_timezone_set('UTC');
Utilizando strtotime()
https://blastcoding.com/creando-y-manejando-fechas-con-php-date/#strtotimeAhora bien, si yo tengo una fecha siendo un string ¿cómo puedo pasársela a la función date
? Obviamente, no me voy a poner a calcular el timestamp para pasarlo.
La función strtotime()
nos permite pasarle una fecha en string y pasarla a timestamp (int). El formato que se le debe pasar a esta función es en inglés o "m/d/y"
, "y-m-d"
.
hagamos unos ejemplos de strtotime():
echo date("jS F, Y", strtotime("11/12/10"))."\n"; echo date("jS F, Y", strtotime("11-12-10"));
12th November, 2010 10th December, 2011
Otras cosas interesantes que podemos hacer con strtotime es pasarle un string q sea "+2 month"
por ejemplo.
Incluso se le podría pasar una fecha + otra por ejemplo "10/10/10 +1 day"
o un "next monday"
ambas deberían funcionar.
echo date("jS F, Y", strtotime("10/10/10 +1 day"));
11th October, 2010
Por último quiero dejar en claro que hay librerias las cuales pueden ayudar mucho con el manejo de fechas como por ejemplo Carbon la cual la puede encontrar en packagist.org
- Anterior: Creando archivos con PHP
- Siguiente: Creando variables, funciones y clases variables