Chose Language:
Author: Admin/Publisher |finished | checked

PHP DateTime

A diferencia de la función date, la clase de PHP DateTime es una clase para la representación de la fecha y la hora.

Sinopsis / Synopsis
class DateTime implements DateTimeInterface {
/* Constantaes heredadas constants */
const string DateTimeInterface::ATOM = "Y-m-d\TH:i:sP";
const string DateTimeInterface::COOKIE = "l, d-M-Y H:i:s T";
const string DateTimeInterface::ISO8601 = "Y-m-d\TH:i:sO";
const string DateTimeInterface::RFC822 = "D, d M y H:i:s O";
const string DateTimeInterface::RFC850 = "l, d-M-y H:i:s T";
const string DateTimeInterface::RFC1036 = "D, d M y H:i:s O";
const string DateTimeInterface::RFC1123 = "D, d M Y H:i:s O";
const string DateTimeInterface::RFC2822 = "D, d M Y H:i:s O";
const string DateTimeInterface::RFC3339 = "Y-m-d\TH:i:sP";
const string DateTimeInterface::RFC3339_EXTENDED = "Y-m-d\TH:i:s.vP";
const string DateTimeInterface::RSS = "D, d M Y H:i:s O";
const string DateTimeInterface::W3C = "Y-m-d\TH:i:sP";
/* Métodos */
public __construct(string $time = "now", DateTimeZone $timezone = null)
public add(DateInterval $interval): DateTime
public static createFromFormat(string $format, string $time, DateTimeZone $timezone = ?): DateTime
public static createFromImmutable(DateTimeImmutable $object): DateTime
public static createFromInterface(DateTimeInterface $object): DateTime
public static getLastErrors(): array
public modify(string $modify): DateTime
public static __set_state(array $array): DateTime
public setDate(int $year, int $month, int $day): DateTime
public setISODate(int $year, int $week, int $day = 1): DateTime
public setTime(int $hour, int $minute, int $second = 0): DateTime
public setTimestamp(int $unixtimestamp): DateTime
public setTimezone(DateTimeZone $timezone): DateTime
public sub(DateInterval $interval): DateTime
public diff(DateTimeInterface $datetime2, bool $absolute = false): DateInterval
public format(string $format): string
public getOffset(): int
public getTimestamp(): int
public getTimezone(): DateTimeZone
public __wakeup()
}

Constantes

Veamos primero las constantes que tenemos

constant name value example date
DateTimeInterface::ATOM "Y-m-d\TH:i:sP" 2022-08-09T22:46:19+02:00
DateTimeInterface::COOKIE "l, d-M-Y H:i:s T" Tuesday, 09-Aug-2022 22:46:19 CEST
DateTimeInterface::ISO8601 "Y-m-d\TH:i:sO" 2022-08-09T22:46:19+0200
DateTimeInterface::RFC822 "D, d M y H:i:s O" Tue, 09 Aug 22 22:46:19 +0200
DateTimeInterface::RFC850 "l, d-M-y H:i:s T" Tuesday, 09-Aug-22 22:46:19 CEST
DateTimeInterface::RFC1036 "D, d M y H:i:s O" Tue, 09 Aug 22 22:46:19 +0200
DateTimeInterface::RFC1123 "D, d M Y H:i:s O" Tue, 09 Aug 2022 22:46:19 +0200
DateTimeInterface::RFC2822 "D, d M Y H:i:s O" Tue, 09 Aug 2022 22:46:19 +0200
DateTimeInterface::RFC3339 "Y-m-d\TH:i:sP" 2022-08-09T22:46:19+02:00
DateTimeInterface::RFC3339_EXTENDED "Y-m-d\TH:i:s.vP" 2022-08-09T22:46:19.854+02:00
DateTimeInterface::RSS "D, d M Y H:i:s O" Tue, 09 Aug 2022 22:46:19 +0200
DateTimeInterface::W3C "Y-m-d\TH:i:sP" 2022-08-09T22:46:19+02:00

Estas constantes antes expuestas serán constantes que puedes usar en el formato, corra el siguiente ejemplo en su pc.

Ejemplo
<!DOCTYPE html>
<html>
    <body>
        <?php
        $objDateTime = new DateTime('NOW');

        ?>
        <h1>my date now <?php echo $objDateTime->format('d-m-Y H:i:s');?></h1>
        lets check diferent constants for this date
        <h2>DateTimeInterface::ATOM </h2>
        <?php echo $objDateTime->format(DateTimeInterface::ATOM);?>
        <h2>DateTimeInterface::COOKIE</h2>
        <?php echo $objDateTime->format(DateTimeInterface::COOKIE);?>
        <h2>DateTimeInterface::ISO8601</h2>
        <?php echo $objDateTime->format(DateTimeInterface::ISO8601);?>
        <h2>DateTimeInterface::RFC822</h2>
        <?php echo $objDateTime->format(DateTimeInterface::RFC822);?>
        <h2>DateTimeInterface::RFC850</h2>
        <?php echo $objDateTime->format(DateTimeInterface::RFC850);?>
        <h2>DateTimeInterface::RFC1036</h2>
        <?php echo $objDateTime->format(DateTimeInterface::RFC1036);?>
        <h2>DateTimeInterface::RFC1123</h2>
        <?php echo $objDateTime->format(DateTimeInterface::RFC1123);?>
        <h2>DateTimeInterface::RFC2822</h2>
        <?php echo $objDateTime->format(DateTimeInterface::RFC2822);?>
        <h2>DateTimeInterface::RFC3339</h2>
        <?php echo $objDateTime->format(DateTimeInterface::RFC3339);?>
        <h2>DateTimeInterface::RFC3339_EXTENDED</h2>
        <?php echo $objDateTime->format(DateTimeInterface::RFC3339_EXTENDED);?>
        <h2>DateTimeInterface::RSS</h2>
        <?php echo $objDateTime->format(DateTimeInterface::RSS);?>
        <h2>DateTimeInterface::W3C</h2>
        <?php echo $objDateTime->format(DateTimeInterface::W3C);?>
        <!------>
    </body>
</html>

Métodos

Veremos todos los métodos que podemos utilizar con la clase DateTime, la mayoría de estos dando DateTime como retorno y también otras clases que veremos más adelante en este blog.

__construct()

https://blastcoding.com/php-datetime/#__construct

Devuelve un nuevo objeto DateTime, tiene 2 argumentos, $time con valor por defecto "now" y $timezone con valor por defecto null .

__construct(string $time = "now", DateTimeZone $timezone = null)

Esto quiere decir que en muchos casos no es necesario pasar estos argumentos al constructor.

constructor sin argumentos
//blastcoding.com example
//take in consideration that we are using now so your date will be your actual date 
<?php
try {
   $fecha = new DateTime();
} catch (Exception $e) {
    echo $e->getMessage();
    exit(1);
}
echo $fecha->format('Y-m-d');
2022-08-09

Veamos unos ejemplos mas para que nos queden las cosas más claras

<?php

// Fecha/hora actuales en la zona horaria Uruguay.
$fecha = new DateTime(null, new DateTimeZone('America/Montevideo'));
echo $fecha->format('Y-m-d H:i:sP') . "\n";

// Fecha/hora actuales en la zona horaria España.
$fecha = new DateTime(null, new DateTimeZone('Europe/Madrid'));
echo $fecha->format('Y-m-d H:i:sP') . "\n";
2022-08-09 20:54:13-03:00
2022-08-10 01:54:13+02:00

add

https://blastcoding.com/php-datetime/#add

Con este método add podemos modificar un objeto DateTime agregando años, meses, días, horas, minutos y segundos

$obj en la siguiente sintaxis debe ser un objeto DateTime.

Sintaxis
$obj->add(DateInterval $interval): DateTime

En el siguiente ejemplo veremos como utilizar add, haciendo agregándole un año como restándole uno

<?php
$fecha = new DateTime();
echo $fecha->format('Y-m-d H:i:sP');
$fecha2=clone $fecha;
$fecha3=clone $fecha;

$fecha2->add(DateInterval::createFromDateString('1 year'));
echo "\n".$fecha2->format('Y-m-d H:i:sP');
$fecha3->add(DateInterval::createFromDateString('-1 year'));
echo "\n".$fecha3->format('Y-m-d H:i:sP');

DateTime::createFromFormat

https://blastcoding.com/php-datetime/#createFromFormat

Primero veremos la definición en inglés, ya que no me gusta la definición en español, ya que han traducido parse como analiza, y si aunque su traducción literal es analiza, creo que debieron traducirlo como convierte o crea.

Parses a time string according to a specified format

php.net

Yo por mi parte traduciría a: Este método crea o convierte a un datetime un string que representa una fecha.

public static DateTime::createFromFormat(string $format, string $datetime, ?DateTimeZone $timezone = null): DateTime|false

Como podemos observar DateTime::createFromFormat tiene 3 argumentos siendo uno del ellos opcional.

$format es un string que representara el nuevo formato, $datetime es el string a ser analizado y convertido a un objeto DateTime.En caso de fallo devolvera false

Si la porción horaria no es dada en $datetime, cuando el objeto sea creado esta no sera 00:00:00 sino el horario en el que se ha llamado el método

Veamos unos ejemplos:

Ejemplo dado en php.net por falundir[at]gmail[dot]com
<?php
$date = DateTime::createFromFormat('Y-m-d', '2012-10-17');
var_dump($date->format('Y-m-d H:i:s')); //will print 2012-10-17 13:57:34 (the current time)
?>

No hay que ser un genio para darnos cuenta de que este método puede ayudarnos bastante cuando levantamos datos de una base de datos y convertirlos luego en un formato que nos sirva.

DateTime::createFromImmutable

https://blastcoding.com/php-datetime/#createFromImmutable

Este método crea un objeto DateTime a partir de un objeto DateTimeImmutable, teniendo este la data que tenía el objeto inmutable. El objeto inmutable no es cambiado de ninguna manera.

Sintaxis
DateTime::createFromImmutable(DateTimeImmutable $object): DateTime
createFromImmutable example
<?php
$date = new DateTimeImmutable("2014-06-20 11:45 Europe/London");

$mutable = DateTime::createFromImmutable( $date );
?>

DateTime::createFromInterface

https://blastcoding.com/php-datetime/#createFromInterface

Tanto DateTime como DateTimeImmutable utilizan DateTimeInterface yes practico el poder crear un nuevo objeto DateTime desde el objeto que usa esta interfaz.

Sintaxis
DateTime::createFromInterface(DateTimeInterface $object): DateTime
<?php
$date = new DateTimeImmutable("2014-06-20 11:45 Europe/London");

$mutable = DateTime::createFromInterface($date);

$date = new DateTime("2014-06-20 11:45 Europe/London");
$also_mutable = DateTime::createFromInterface($date);
?>

DateTime::getLastErrors

https://blastcoding.com/php-datetime/#getLastErrors

Este método estático retorna tanto las alertas como los errores que halla en un array, y falso si no hay ningún error o alerta.

Sintaxis
DateTime::getLastErrors(): array|false

modify

https://blastcoding.com/php-datetime/#modify

Modifica el timestamp de un objeto DateTime, este método retornará false si falla.

En el siguiente código $obj representa un objeto DateTime

Sintaxis
$obj->modify(string $modifier): DateTime|false
modify example
<?php
$date = new DateTime('2006-12-12');
$date->modify('+1 month');
echo $date->format('Y-m-d');
?>

__set_state

https://blastcoding.com/php-datetime/#__set_state

Este método correrá cuando se haga var_export() a nuestro objeto DateTime, tenga en cuenta que var_export es similar a var_dump excepto que el código devuelto es ejecutable.

DateTime::__set_state(array $array): DateTime

Veamos un ejemplo de esto:

Using var_export()
<?php
$date = DateTime::createFromFormat('Y-m-d', '2012-10-17');
var_export($date);
DateTime::__set_state(array(
   'date' => '2012-10-17 15:28:13.000000',
   'timezone_type' => 3,
   'timezone' => 'UTC',
))

El código que hemos obtenido en el ejemplo es completamente ejecutable.

setDate

https://blastcoding.com/php-datetime/#setDate

Método para definir/setear una fecha.

Sintaxis
$obj->setDate(int $year, int $month, int $day): DateTime

$year será el año, $month será el mes y $day el día. Este método devolverá DateTime

setDate example
<?php
$date = new DateTime();
echo "today date: ".$date->format('d-m-Y');
echo  "\n new date setted:" ;
$date->setDate(2002, 7, 30);
echo $date->format('Y-m-d');
?>

setISODate

https://blastcoding.com/php-datetime/#setISODate

Define la fecha con base en los estándares ISO 8601 usando semanas y día en vez de fechas específicas.

Sintaxis
$obj->setISODate(int $year, int $week, int $dayOfWeek = 1): DateTime

setTime

https://blastcoding.com/php-datetime/#setTime

Setea / define el tiempo

$obj en la siguiente sintaxis representa un objeto DateTime

Sintaxis
$obj->setTime(
    int $hour,
    int $minute,
    int $second = 0,
    int $microsecond = 0
): DateTime

setTimestamp

https://blastcoding.com/php-datetime/#setTimestamp

Define la fecha y tiempo basado en un timestamp de UNIX

Sintaxis
$obj->setTimestamp(int $timestamp): DateTime

setTimezone

https://blastcoding.com/php-datetime/#setTimezone

Setea un nuevo Timezone para un objeto DateTime

Sintaxis
$obj->setTimezone(DateTimeZone $timezone): DateTime

sub

https://blastcoding.com/php-datetime/#sub

Realiza la substracción de años, meses, días, horas, segundos de un objeto DateTime

(-)

Sintaxis
$obj->sub(DateInterval $interval): DateTime
ejemplo del metodo sub
$fecha_hora = new DateTime('2023-04-23 12:00:00');
$intervalo = new DateInterval('PT2H'); // Restar 2 horas
$fecha_hora->sub($intervalo);

echo $fecha_hora->format('Y-m-d H:i:s'); // Imprime "2023-04-23 10:00:00"
2023-04-23 10:00:00

diff

https://blastcoding.com/php-datetime/#diff

Retorna la diferencia entre 2 fechas dando como resultado un objeto DateInterval, pudiendo usar el método format para convertirlo a un string y luego para poder imprimir en pantalla.

Sinopsis / Synopsis
public diff(DateTimeInterface $datetime2, bool $absolute = false): DateInterval

Como ejemplo podriamos hacer lo siguiente:

ejemplo de diff
$fecha1 = new DateTime('2023-04-23 12:00:00');
$fecha2 = new DateTime('2023-04-23 10:00:00');
$diferencia = $fecha1->diff($fecha2);

echo $diferencia->format('%H:%I:%S');
02:00:00

format

https://blastcoding.com/php-datetime/#format

Con este método podremos formatear la fecha de un objeto DateTime, DateTimeImmutable o que use la interface DateTimeInterface

Sinopsis / Synopsis
public format(string $format): string

Aunque tenemos ya un montón de ejemplos sobre format en las constantes, dejaré un ejemplo aquí:

Ejemplo de format
$fecha_hora = new DateTime('2023-04-23 12:00:00');

$ff = $fecha_hora->format('d-m-Y H:i');
echo $ff;

getOffset

https://blastcoding.com/php-datetime/#getOffset

Nos retornará el desfase horario, en ciertos países hay desfase horario según si es invierno o verano, por ejemplo en Uruguay y Argentina se suele correr una hora.

El metodo getOffset nos data un int el cual será un timestamp

Sinopsis / Synopsis
public getOffset(): int

El siguiente es un ejemplo que se da en la página de php.net

ejemplo de getOffset
$winter = new DateTimeImmutable('2010-12-21', new DateTimeZone('America/New_York'));
$summer = new DateTimeImmutable('2008-06-21', new DateTimeZone('America/New_York'));
$gw = new DateTimeImmutable('2008-06-21', new DateTimeZone('UTC'));
echo $winter->getOffset() . "\n";
echo $summer->getOffset() . "\n";
echo $gw->getOffset()."\n";
-18000
-14400
0

Vea que agregue en el ejemplo el DTZ de Greenwich esto es, para que usted sepa comparado contra qué tiempo está.

getTimestamp

https://blastcoding.com/php-datetime/#getTimestamp

Obtiene el Timestamp UNIX

Sinopsis / Synopsis
public getTimestamp(): int
Ejemplo getTimestamp
$winter = new DateTimeImmutable('2010-12-21', new DateTimeZone('America/New_York'));
echo $winter->getTimestamp();
1292907600

getTimezone

https://blastcoding.com/php-datetime/#getTimezone

Retorna la zona horaria(timezone) relativa al DateTime dado en forma de objeto DateTimeZone y falso en caso de no poder devolver el objeto

Sinopsis / Synopsis
public getTimezone(): DateTimeZone
$winter = new DateTimeImmutable('2010-12-21', new DateTimeZone('America/New_York'));
var_dump($winter->getTimezone());
object(DateTimeZone)#2 (2) {
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(16) "America/New_York"
}

__wakeup()

Sinopsis / Synopsis
public __wakeup()
Category: php
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category