10

Strtotime y las fechas en PHP

Ayer comentábamos cómo hacer un datePicker en jQuery y no dijimos nada sobre cómo tratar esas fechas para insertarlas en una base de datos.

La función strtotime devuelve un timestamp, y toma como parámetro una fecha en un determinado formato. En esta entrada vamos a ver qué formatos de fecha podemos pasarle a strtotime.

Recordad, las fechas que se mostrarán en el input del datePicker que vimos ayer, dependerá de cómo hayamos configurado date.js en la línea:

Date.format = 'dd/mm/yyyy';

Este formato de fecha que hemos elegido no nos servirá a la hora de hacer un timestamp con strtotime, ya que el formato dd/mm/yyyy no es reconocido por esa función, como podemos ver en este comentario. Algunos formatos reconocidos son:

  • mm/dd/yyyy
  • mm/dd/yy
  • yyyy/mm/dd
  • dd-mm-yyyy
  • yy-mm-dd
  • yyyy-mm-dd

Así que, por ejemplo, si la fecha es 1 de Febrero de 2009 (que se nos mostraría como 01/02/2009), al pasarlo por strtotime nos devolverá el timestamp del 2 de Enero de 2009, es decir, pensará que le estamos pasando una fecha en formato mm/dd/yyyy.

Para solucionar esto, podemos cambiar las barras por guiones antes de aplicarle la función strtotime. Por ejemplo:

<?php
$fecha_esp = str_replace("/", "-", $fecha_ing);
$timestamp = strtotime($fecha_esp);
?>

En este caso, al pasarle a strtotime la fecha en formato dd-mm-yyyy sí nos devolverá el timestamp correcto.

Otra solución es cambiar en date.js el formato de las fechas, poniendo simplemente “dd-mm-yyyy”. En este caso, las fechas se mostrarán en el input en el formato dd-mm-yyyy, y se lo podemos pasar tal cual a la función strtotime.