Hola comprobé que al utilizar el tiempo devuelvo por mktime(); y luego editar lo en plan de restarle un día(3600*60*12) no es exacto ya que si hago un bucle al final se repiten los días. Por que ?
Saludos
No entendi NADA! :huh:
Pues.. diferencia entre:
mktime()-3600*60*24
strtotime('-1 day');
Tienes un error en la implementación.
En estos casos, lo mas fácil es convertirlo a fecha normal para ver cual es exactamente la fecha que muestran.
<?php
$mktime = mktime()-3600*60*24;
echo $mktime,' - ',date('d/m/Y H:i:s',$mktime), '<br />';
$strtime = strtotime('-1 day');
echo $strtime,' - ',date('d/m/Y H:i:s',$strtime), '<br />';
?>
En este caso me devuelve
1390742193 - 26/01/2014 14:16:33
1395839793 - 26/03/2014 14:16:33
Si te fijas, el mes cambia del 3 al 1. Eso es porque:
3600 * 60 = 216000
216000 * 24 = 5184000
Es decir, le restas 5184000 segundos que son 60 días.
Tienes que tener en cuenta que YA estas tratando con segundos y que no te hace falta convertirlo a horas. Es decir, si 3600 segundos son 1 hora.. tan simple como:
$mktime = mktime()-(3600*24);
Saludos
A bueno esto fue un despiste pero si le resto 3600*60 es lo mismo que usar strtotime() ?
Si. Pero si solo lo vas a utilizar para obtener el unix timestamp, utiliza time()
Saludos
Vale pero igual queda la duda si existe diferencia en este caso entre
time()-3600*24;
strtotime('-1 day');
mktime()-3600*24;
Entre estos 3 hay alguna diferencia y si no cual seria mas rápido?
Saludos
Las diferencias las ves en php.net
http://us3.php.net/manual/es/function.mktime.php
Citar.Devuelve la marca de tiempo Unix correspondiente a los argumentos dados. Esta marca de tiempo es un entero que contiene el número de segundos entre la Época Unix (1 de Enero del 1970 00:00:00 GMT) y el instante especificado.
http://es1.php.net/strtotime
CitarEsta función espera que se proporcione una cadena que contenga un formato de fecha en Inglés US e intentará convertir ese formato a una fecha Unix (el número de segundos desde el 1 de Enero del 1970 00:00:00 UTC), relativa a la marca de tiempo dada en now, o la marca de tiempo actual si now no se proporciona.
http://es1.php.net/time
CitarDevuelve el momento actual medido como el número de segundos desde la Época Unix (1 de Enero de 1970 00:00:00 GMT).
En fin, no tiene ningún sentido utilizar
mktime() si no le vas a proporcionar parámetros. No tiene ningún sentido utilizar
strtotime('-1 day') si puedes hacer -3600*24.
strtotime() es por ejemplo para cuando quieres calcular en que fecha cae el lunes de la tercera semana de XXXX año.
El mas rápido de todos es obviamente
time() ya que no procesa ningún argumento ni nada.
Saludos
Gracias ahora me quedo mas claro pero existe alguna forma de ver estas funciones por dentro ? Hay alguna pagina que ha publicado su código fuente?
Te puedes descargar el código fuente de PHP y buscar a ver como se implementan.
http://www.php.net/downloads.php#v5.4.26
Saludos