Cómo pasar datos de tipo DateTime a través de $_GET

Tenés una fecha guardada en un objeto DateTime y necesitás enviarla a otra página… incluso puede que sea una página de otro sitio (un servicio web por ejemplo).

Suponiendo que la URL del destino es algo como http://otrositio.com?fecha=dd-mm-YYYY, sólo se trata de tomar el string http://otrositio.com?fecha= y concatenar el objeto.

No parece muy complicado, ¿no?

No es que sea una ciencia oculta tampoco, pero no es tan simple.

¿Cuál es el problema?

La clase DateTime no cuenta con un método __toString, con lo cual, si intentás algo como:

<?php

$d = new DateTime();
$url = 'http://otrositio.com?fecha='.$d;

Te vas a encontrar con un error:

PHP Warning:  Uncaught Error: Object of class DateTime could not be converted to string

El punto es que no existe una única forma de expresar una fecha como una cadena.

Por ejemplo:

  • 22-12-1977
  • 22 de Diciembre de 1977
  • Jueves 22 Dic. 1977

Y unas cuantas más son, en rigor, la misma fecha.

De modo que PHP no es capaz de adivinar cuál de todos estos formatos querés usar.

Cómo formatear una fecha usando PHP

Claro que, siendo un problema tan común, no es extraño asumir que existe una solución estándar.

Esta solución es precisamente el método format.

Por ejemplo, para darle formato dd-mm-YYYY a una fecha se puede usar:

<?php

$d = new DateTime();
$s = $d->format('d-m-Y');

Y luego usar el resultado para generar la URL:

<?php

$d = new DateTime();
$s = $d->format('d-m-Y');
$url = 'http://otrositio.com?fecha='.$s;

Cómo transformar un string recibido por $_GET en un DateTime

Y ahora… qué pasaría si tu situación es la inversa, es decir, ¿qué deberías hacer si necesitás tomar una fecha como parámetro desde la URL?

Pues bien, aquí tu aliado será el constructor de la clase DateTime:

<?php

$d = new DateTime($_GET['fecha']);

O bien, para evitar problemas, el método estático createFromFormat:

<?php

$d = DateTime::createFromFormat('d-m-Y', $_GET['fecha']);

Y una vez convertido en objeto ya puedes usar todo el resto de los métodos que seguro te harán mucho más cómodo el trabajo con datos de tipo fecha.

mchojrin

¿Te quedó alguna duda? Publica aca tu pregunta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: