Estoy tratando de convertir una marca de tiempo del formato 2009-09-12 20:57:19
y convertirlo en algo así como 3 minutes ago
con PHP.
Encontré un script útil para hacer esto, pero creo que está buscando un formato diferente para usar como variable de tiempo. El script que quiero modificar para trabajar con este formato es:
function _ago($tm,$rcs = 0) {
$cur_tm = time();
$dif = $cur_tm-$tm;
$pds = array('second','minute','hour','day','week','month','year','decade');
$lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);
for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);
$no = floor($no);
if($no <> 1)
$pds[$v] .='s';
$x = sprintf("%d %s ",$no,$pds[$v]);
if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0))
$x .= time_ago($_tm);
return $x;
}
Creo que en esas primeras líneas el script está tratando de hacer algo que se parece a esto (matemática de formato de fecha diferente):
$dif = 1252809479 - 2009-09-12 20:57:19;
¿Cómo haría para convertir mi marca de tiempo en ese formato (unix?)?
Respuestas:
Use ejemplo:
La entrada puede ser cualquier formato de fecha y hora admitido .
Salida:
Función:
fuente
$full
debería ser una entrada de cadena para filtrar la salida según sea necesario). por ejtime_elapsed_string($datetime, $format = "ymw")
. Versión plana de PS: stackoverflow.com/a/5010169/318765$full = false
a$level = 7
yif (!$full) $string = array_slice($string, 0, 1);
a$string = array_slice($string, 0, $level);
y llamadatime_elapsed_string($datetime, 2)
para obtener sólo las dos cadenas de fecha más altos. Creo que esto debería satisfacer todas las necesidades.Unknown property (w)
a esta línea$diff->w = floor($diff->d / 7);
Unknown property (w)
en PHP5.3 y versiones posteriores, convierta $ diff de un objeto en una matriz y ajuste el resto del código en consecuencia. Tengo la solución publicada aquí: stackoverflow.com/a/32723846/235633fuente
30days for month
, y12x30days for year
, y por eso devolverá un número inválido de años debajo del año <= 1978. Ejemplo donde devuelve 39 años, pero debería 38. Y tampoco funciona para años debajo de 1970.fuente
Esta es realmente una mejor solución que he encontrado. Utiliza jQuery pero funciona perfectamente. También se actualiza automáticamente similar a SO y Facebook, por lo que no tiene que actualizar la página para ver las actualizaciones.
Este complemento leerá su
datetime
atributo en la<time>
etiqueta y lo completará por usted.http://timeago.yarp.com/
fuente
No sé por qué nadie menciona el carbono todavía.
https://github.com/briannesbitt/Carbon
Esta es en realidad una extensión de php dateTime (que ya se usó aquí) y tiene: método diffForHumans. Entonces, todo lo que necesitas hacer es:
más ejemplos: http://carbon.nesbot.com/docs/#api-humandiff
Ventajas de esta solución:
fuente
Encontré resultados como el siguiente feo:
Por eso me di cuenta de una función que respeta los plurales, elimina los valores vacíos y, opcionalmente, es posible acortar la salida:
Se ve mucho mejor:
Opcionalmente, use
$level = 2
para acortarlo de la siguiente manera:Elimine la
$lang
parte si la necesita solo en inglés o edite esta traducción para satisfacer sus necesidades:fuente
explode
yarray_combine
.fuente
Modifiqué un poco la función original (en mi opinión, más útil o lógica).
fuente
Hice esto y funciona bien, funciona tanto para la marca de tiempo de Unix como para la hora con
1470919932
formato16-08-11 14:53:30
fuente
switch (true)
aunque$time
se evalúetrue
?Solo para lanzar otra opción ...
Si bien prefiero publicar el método DateTime aquí , no me gustó el hecho de que mostrara 0 años, etc.
fuente
te ayuda a comprobarlo
fuente
Usualmente uso esto para encontrar la diferencia entre
current
ypassed
datetime stamp
SALIDA
CÓDIGO
fuente
Soy consciente de que hay varias respuestas aquí, pero esto es lo que se me ocurrió. Esto solo maneja los valores de DATETIME de MySQL según la pregunta original a la que respondía. La matriz $ a necesita algo de trabajo. Agradezco los comentarios sobre cómo mejorar. Llamar como:
echo time_elapsed_string ('2014-11-14 09:42:28');
fuente
Lo intenté y funciona bien para mí.
Consulte este enlace para referencia aquí
¡Gracias! y divertirse.
fuente
Esto es con lo que fui. Es una versión modificada de la publicación de Abbbas khan:
fuente
Muchas soluciones aquí no explicaron el redondeo. Por ejemplo:
El evento ocurrió a las 3 de la tarde hace dos días. Si está revisando a las 2pm, se mostrará hace un día. Si está revisando a las 4pm, se mostrará hace dos días.
Si está trabajando con unix time, esto ayuda:
No es perfecto si le preocupan los segundos de salto y el horario de verano.
fuente
Intente esto, lo encontré de mis viejos códigos, que muestra el resultado correcto
Ejemplo:
echo ago('2020-06-03 00:14:21 AM');
Salida:
6 days
fuente
Tendrá que tomar cada pieza individual de su marca de tiempo y convertirla en tiempo Unix. Por ejemplo, para la marca de tiempo, 2009-09-12 20:57:19.
(((2008-1970) * 365) + (8 * 30) +12) * 24 + 20 le daría una estimación aproximada de las horas desde el 1 de enero de 1970.
Tome ese número, multiplique por 60 y agregue 57 para obtener los minutos.
Toma eso, multiplica por 60 y suma 19.
Sin embargo, eso lo convertiría de manera muy aproximada e inexacta.
¿Hay alguna razón por la que no puedes tomar el tiempo normal de Unix para comenzar?
fuente
Hay algún problema con el tiempo de visualización de algunos idiomas, por ejemplo, en árabe hay 3 formatos necesarios para mostrar la fecha. Utilizo estas funciones en mis proyectos con la esperanza de que puedan ayudar a alguien (cualquier sugerencia o mejora me agradará :))
fuente
fuente
Aquí está mi solución, compruebe y modifique según sus requisitos
Gracias
fuente
fuente
Esta función no está diseñada para usarse en inglés. Traduje las palabras en inglés. Esto necesita más reparaciones antes de usarlo en inglés.
fuente
Uso de:
Función:
fuente
Respuesta ligeramente modificada desde arriba:
fuente
La siguiente es una solución muy simple y extremadamente eficiente.
tiempo de eco transcurrido (1201570814);
Salida de muestra:
6 años 4 meses 3 semanas 4 días 12 horas 40 minutos y 36 segundos.
fuente
Aquí está mi solución para un módulo de notificación que construí hace algún tiempo. Devuelve un resultado similar al menú desplegable de notificaciones de Facebook (por ejemplo, hace 1 día, justo ahora, etc.).
fuente
simplemente pasa la fecha y hora a esta función. se imprimiría en el formato de hace tiempo para usted
fuente
Estoy usando la siguiente función durante varios años. Y está funcionando bien:
fuente