Al usar strotime()
debe asegurarse de que está utilizando un formato de fecha y hora válido
. De lo contrario, strtotime()
devolverá false
o darle un valor inesperado.
Se supone que las fechas que usan el formato XX/XX/XXXX están en formato estadounidense, lo que significa que los dos primeros dígitos representan el mes, los dos dígitos siguientes representan el día del mes y los últimos cuatro dígitos representan el año. Cuando se utilizan guiones, se supone que las fechas están en formato europeo. Por ejemplo:
04/18/2017 = April 18, 2017
12/18/2017 = December 18, 2017
18-04-2017 = April 18, 2017
18-12-2017 = December 18, 2017
Si accidentalmente cambia el día y el mes strtotime()
devolverá false ya que la fecha no es válida.
18/04/2017 // error
18/12/2017 // error
04-18-2018 // error
12-18-2017 // error
Los ejemplos anteriores son sencillos. Pero puede tener problemas cuando las fechas pueden ser ambiguas. Por ejemplo:
04/12/2017 = April 12, 2017
12/04/2017 = December 4, 2017
04-12-2017 = December 4, 2017
12-04-2017 = April 12, 2017
En los ejemplos anteriores, al cambiar el día y el mes, aún obtenemos fechas válidas que pueden causar resultados inesperados en su aplicación. Para resolver estos posibles problemas, se recomienda usar DateTime::createFromFormat()
para analizar el anuncio de fecha, devuelve un DateTime()
objeto desde el cual puede obtener una marca de tiempo Unix
, convertir la fecha a otro formato
, o utilícelo para compararlo con otros DateTime
objetos.
// Parse US date format
$date1 = DateTime::createFromFormat('m/d/Y', '04/18/2017');
// Get Unix timestamp of 1493581268
$timestamp = $date1->getTimestamp();
// Parse European date format
$date2 = DateTime::createFromFormat('d-m-Y', ''18-04-2017);
// Get MySQL format (ISO-8601) of 2017-04-18
$mysqlDate = $date2->format('Y-m-d');
Ver también:
Para su caso específico, el siguiente código funcionará:
$date = $date1 = DateTime::createFromFormat('m/d/Y', '20/02/2000');
$D->query = $date->format('Y-m-d'); // 2000-02-20