numero - mostrar fecha en php
Convertir un formato de fecha en otro en PHP (14)
Debe convertir $ old_date de nuevo en una marca de tiempo, ya que la función de fecha requiere una marca de tiempo como segundo argumento.
¿Hay una forma sencilla de convertir un formato de fecha en otro formato de fecha en PHP?
Tengo esto:
$old_date = date(''y-m-d-h-i-s''); // works
$middle = strtotime($old_date); // returns bool(false)
$new_date = date(''Y-m-d H:i:s'', $middle); // returns 1970-01-01 00:00:00
Pero, por supuesto, me gustaría devolver una fecha actual en lugar del amanecer. ¿Qué estoy haciendo mal?
El segundo parámetro de date()
debe ser una marca de tiempo adecuada (segundos desde el 1 de enero de 1970). Estás pasando una cadena que date () no puede reconocer.
Puede usar strtotime() para convertir una cadena de fecha en una marca de tiempo. Sin embargo, incluso strtotime () no reconoce el formato ymdhis
.
PHP 5.3 y hasta
Utilice DateTime::createFromFormat
. Le permite especificar una máscara exacta, usando la sintaxis de la date()
, para analizar las fechas de las cadenas entrantes con.
PHP 5.2 y más bajo
Deberá analizar los elementos (año, mes, día, hora, minuto, segundo) manualmente con substr()
y entregar los resultados a mktime() que le construirán una marca de tiempo.
¡Pero eso es mucho trabajo! Recomiendo usar un formato diferente que strftime () pueda entender. strftime () entiende cualquier entrada de fecha antes de the next time joe will slip on the ice
. por ejemplo, esto funciona:
$old_date = date(''l, F d y h:i:s''); // returns Saturday, January 30 10 02:06:34
$old_date_timestamp = strtotime($old_date);
$new_date = date(''Y-m-d H:i:s'', $old_date_timestamp);
El siguiente es un método fácil para convertir fechas a diferentes formatos.
// Create a new DateTime object
$date = DateTime::createFromFormat(''Y-m-d'', ''2016-03-25'');
// Output the date in different formats
echo $date->format(''Y-m-d'')."/n";
echo $date->format(''d-m-Y'')."/n";
echo $date->format(''m-d-Y'')."/n";
Esta es la otra forma en que puedes convertir el formato de fecha.
<?php
$pastDate = "Tuesday 11th October, 2016";
$pastDate = str_replace(",","",$pastDate);
$date = new DateTime($pastDate);
$new_date_format = $date->format(''Y-m-d'');
echo $new_date_format.'' 23:59:59''; ?>
Esta forma nativa ayudará a convertir cualquier formato ingresado al formato deseado.
$formatInput = ''d-m-Y''; //Give any format here, this would be converted into your format
$dateInput = ''01-02-2018''; //date in above format
$formatOut = ''Y-m-d''; // Your format
$dateOut = DateTime::createFromFormat($formatInput, $dateInput)->format($formatOut);
Esto resuelto por mí,
$old = ''18-04-2018'';
$new = date(''Y-m-d'', strtotime($old));
echo $new;
Salida: 2018-04-18
La forma más fácil de hacer esto es
$myDateTime = DateTime::createFromFormat(''Y-m-d'', $dateString);
$newDateString = $myDateTime->format(''m/d/Y'');
Primero le está dando el formato en el que se encuentra $ dateString. Luego le está diciendo el formato en el que desea que $ newDateString esté en.
Esto también evita el uso de strtotime, que puede ser difícil de trabajar a veces.
Si no está transformando de un formato de fecha a otro, sino que solo desea la fecha actual (o fecha y hora) en un formato específico, es aún más fácil:
$now = new DateTime();
$timestring = $now->format(''Y-m-d h:i:s'');
Esta otra pregunta también se refiere al mismo tema: Convertir formato de fecha aaaa-mm-dd => dd-mm-aaaa .
Para convertir $date
de dd-mm-yyyy hh:mm:ss
a una fecha de MySQL adecuada, hago lo siguiente:
$date = DateTime::createFromFormat(''d-m-Y H:i:s'',$date)->format(''Y-m-d H:i:s'');
Prueba esto:
$old_date = date(''y-m-d-h-i-s'');
$new_date = date(''Y-m-d H:i:s'', strtotime($old_date));
Prueba esto:
$tempDate = explode(''-'',''03-23-15'');
$date = ''20''.$tempDate[2].''-''.$tempDate[0].''-''.$tempDate[1];
Solo usar cadenas, para mí es una buena solución, menos problemas con mysql. Detecta el formato actual y lo cambia si es necesario, esta solución es solo para formato español / francés e inglés, sin utilizar la función phetime datetime.
class dateTranslator {
public static function translate($date, $lang) {
$divider = '''';
if (empty($date)){
return null;
}
if (strpos($date, ''-'') !== false) {
$divider = ''-'';
} else if (strpos($date, ''/'') !== false) {
$divider = ''/'';
}
//spanish format DD/MM/YYYY hh:mm
if (strcmp($lang, ''es'') == 0) {
$type = explode($divider, $date)[0];
if (strlen($type) == 4) {
$date = self::reverseDate($date,$divider);
}
if (strcmp($divider, ''-'') == 0) {
$date = str_replace("-", "/", $date);
}
//english format YYYY-MM-DD hh:mm
} else {
$type = explode($divider, $date)[0];
if (strlen($type) == 2) {
$date = self::reverseDate($date,$divider);
}
if (strcmp($divider, ''/'') == 0) {
$date = str_replace("/", "-", $date);
}
}
return $date;
}
public static function reverseDate($date) {
$date2 = explode('' '', $date);
if (count($date2) == 2) {
$date = implode("-", array_reverse(preg_split("//D/", $date2[0]))) . '' '' . $date2[1];
} else {
$date = implode("-", array_reverse(preg_split("//D/", $date)));
}
return $date;
}
UTILIZAR
dateTranslator::translate($date, ''en'')
Strtotime lo resolverá. Las fechas no son las mismas y todas están en formato de nosotros.
<?php
$e1 = strtotime("2013-07-22T12:00:03Z");
echo date(''y.m.d H:i'', $e1);
echo "2013-07-22T12:00:03Z";
$e2 = strtotime("2013-07-23T18:18:15Z");
echo date (''y.m.d H:i'', $e2);
echo "2013-07-23T18:18:15Z";
$e1 = strtotime("2013-07-21T23:57:04Z");
echo date (''y.m.d H:i'', $e2);
echo "2013-07-21T23:57:04Z";
?>
Los basicos
La forma más simple de convertir un formato de fecha en otro es usar strtotime()
con date()
. strtotime()
convertirá la fecha en una marca de tiempo Unix . Ese sello de tiempo de Unix se puede pasar a la date()
para convertirlo al nuevo formato.
$timestamp = strtotime(''2008-07-01T22:35:17.02'');
$new_date_format = date(''Y-m-d H:i:s'', $timestamp);
O como una sola línea:
$new_date_format = date(''Y-m-d H:i:s'', strtotime(''2008-07-01T22:35:17.02''));
Tenga en cuenta que strtotime()
requiere que la fecha esté en un formato válido . Si no se proporciona un formato válido, strtotime()
devolverá false, lo que provocará que su fecha sea 1969-12-31.
Usando DateTime()
A partir de PHP 5.2, PHP ofreció la clase DateTime()
que nos ofrece herramientas más poderosas para trabajar con fechas (y hora). Podemos reescribir el código anterior usando DateTime()
como tal:
$date = new DateTime(''2008-07-01T22:35:17.02'');
$new_date_format = $date->format(''Y-m-d H:i:s'');
Trabajando con las marcas de tiempo de Unix
date()
toma un timeatamp de Unix como su segundo parámetro y le devuelve una fecha formateada:
$new_date_format = date(''Y-m-d H:i:s'', ''1234567890'');
DateTime () funciona con las marcas de tiempo de Unix agregando una @
antes de la marca de hora:
$date = new DateTime(''@1234567890'');
$new_date_format = $date->format(''Y-m-d H:i:s'');
Si la marca de tiempo que tiene es en milisegundos (puede terminar en 000
y / o la marca de tiempo tiene una longitud de trece caracteres), deberá convertirla en segundos antes de poder convertirla a otro formato. Hay dos maneras de hacer esto:
- Recorte los últimos tres dígitos usando
substr()
Recortar los últimos tres dígitos se puede lograr de varias maneras, pero usar substr()
es la más fácil:
$timestamp = substr(''1234567899000'', -3);
- Divide el substr por 1000
También puede convertir la marca de tiempo en segundos dividiendo por 1000. Debido a que la marca de tiempo es demasiado grande para que los sistemas de 32 bits puedan realizar BCMath matemáticas, necesitará usar la biblioteca BCMath para hacer las matemáticas como cadenas:
$timestamp = bcdiv(''1234567899000'', ''1000'');
Para obtener una marca de tiempo Unix puede usar strtotime()
que devuelve una marca de tiempo Unix:
$timestamp = strtotime(''1973-04-18'');
Con DateTime () puedes usar DateTime::getTimestamp()
$date = new DateTime(''2008-07-01T22:35:17.02'');
$timestamp = $date->getTimestamp();
Si está ejecutando PHP 5.2, puede usar la opción de formato U
lugar:
$date = new DateTime(''2008-07-01T22:35:17.02'');
$timestamp = $date->format(''U'');
Trabajar con formatos de fecha no estándar y ambiguos.
Desafortunadamente, no todas las fechas con las que un desarrollador tiene que trabajar están en un formato estándar. Afortunadamente, PHP 5.3 nos proporcionó una solución para eso. DateTime::createFromFormat()
nos permite decirle a PHP en qué formato se encuentra una cadena de fecha para que pueda analizarse con éxito en un objeto DateTime para una mayor manipulación.
$date = DateTime::createFromFormat(''F-d-Y h:i A'', ''April-18-1973 9:48 AM'');
$new_date_format = $date->format(''Y-m-d H:i:s'');
En PHP 5.4, obtuvimos la capacidad de hacer acceso a los miembros de la clase en la creación de instancias, lo que nos permite convertir nuestro código DateTime()
en una sola línea:
$new_date_format = (new DateTime(''2008-07-01T22:35:17.02''))->format(''Y-m-d H:i:s'');
$new_date_format = DateTime::createFromFormat(''F-d-Y h:i A'', ''April-18-1973 9:48 AM'')->format(''Y-m-d H:i:s'');
$old_date = date(''y-m-d-h-i-s''); // works
Estás haciendo mal aquí, esto debería ser
$old_date = date(''y-m-d h:i:s''); // works
separador de tiempo es '':''
Creo que esto ayudará...
$old_date = date(''y-m-d-h-i-s''); // works
preg_match_all(''/(/d+)-(/d+)-(/d+)-(/d+)-(/d+)-(/d+)/'', $old_date, $out, PREG_SET_ORDER);
$out = $out[0];
$time = mktime($out[4], $out[5], $out[6], $out[2], $out[3], $out[1]);
$new_date = date(''Y-m-d H:i:s'', $time);
O
$old_date = date(''y-m-d-h-i-s''); // works
$out = explode(''-'', $old_date);
$time = mktime($out[3], $out[4], $out[5], $out[1], $out[2], $out[0]);
$new_date = date(''Y-m-d H:i:s'', $time);