new - string to date php
Convertir cadena a Date y DateTime (7)
Si tengo una cadena PHP en el formato de mm-dd-YYYY
(por ejemplo, 10-16-2003), ¿cómo lo convierto correctamente a una Date
y luego a una Date
y hora en el formato de YYYY-mm-dd
? La única razón por la que pido Date
y Date
es porque necesito una en un lugar y la otra en un lugar diferente.
Debe tener cuidado con los formatos m / d / Y y mdY. PHP considera que significa m / d / Y y que significa dmY. Describiría explícitamente el formato de entrada en este caso:
$ymd = DateTime::createFromFormat(''m-d-Y'', ''10-16-2003'')->format(''Y-m-d'');
De esa manera usted no está en los caprichos de una determinada interpretación.
Para analizar la fecha, debe usar: DateTime :: createFromFormat ();
Ex:
$dateDE = "16/10/2013";
$dateUS = /DateTime::createFromFormat("d.m.Y", $dateDE)->format("m/d/Y");
Sin embargo, cuidado, porque esto chocará con:
PHP Fatal error: Call to a member function format() on a non-object
Realmente necesitas verificar que el formato haya ido bien, primero:
$dateDE = "16/10/2013";
$dateObj = /DateTime::createFromFormat("d.m.Y", $dateDE);
if (!$dateObj)
{
throw new /UnexpectedValueException("Could not parse the date: $date");
}
$dateUS = $dateObj->format("m/d/Y");
Ahora, en lugar de estrellarse, obtendrás una excepción, que puedes capturar, propagar, etc.
$ dateDE tiene el formato incorrecto, debe ser "16.10.2013";
Si está utilizando PHP 5.2 o alto, use DateTime como se mencionó anteriormente. This artículo ayudará.
Si tiene el formato dd-mm-aaaa, en PHP no funcionará como se esperaba. En el documento PHP tienen la siguiente guía.
Las fechas en los formatos m / d / a o dmy se desambiguan al mirar el separador entre los diversos componentes: si el separador es una barra (/), se asume el m / d / y estadounidense; mientras que si el separador es un guión (-) o un punto (.), se asume el formato dmy europeo.
Por lo tanto, simplemente no puede utilizar como desee. Cuando intente usar el formato dd / mm / aaaa con esto, eliminará FALSO. Puedes ajustar con lo siguiente.
$date = "23/02/2013";
$timestamp = strtotime($date);
if ($timestamp === FALSE) {
$timestamp = strtotime(str_replace(''/'', ''-'', $date));
}
echo $timestamp; // prints 1361577600
Use strtotime()
en su primera fecha y luego en la date(''Ym-d'')
para volver a convertirlo:
$time = strtotime(''10/16/2003'');
$newformat = date(''Y-m-d'',$time);
echo $newformat;
// 2003-10-16
Tenga en cuenta que existe una diferencia entre el uso de barra inclinada /
y guión -
en la función strtotime()
. Para citar de php.net:
Las fechas en los formatos m / d / a o dmy se desambiguan al mirar el separador entre los diversos componentes: si el separador es una barra (/), se asume el m / d / y estadounidense; mientras que si el separador es un guión (-) o un punto (.), se asume el formato dmy europeo.
Para la primera cita
$_firstDate = date("m-d-Y", strtotime($_yourDateString));
Para nueva fecha
$_newDate = date("Y-m-d",strtotime($_yourDateString));
$d = new DateTime(''10-16-2003'');
$timestamp = $d->getTimestamp(); // Unix timestamp
$formatted_date = $d->format(''Y-m-d''); // 2003-10-16
Editar: también puede pasar un DateTimeZone al constructor DateTime () para garantizar la creación de la fecha para la zona horaria deseada, no la predeterminada del servidor.