Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: patilanz en 27 Marzo 2014, 12:20 pm



Título: mktime y la edicion del tiempo directamente
Publicado por: patilanz en 27 Marzo 2014, 12:20 pm
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


Título: Re: mktime y la edicion del tiempo directamente
Publicado por: Shell Root en 27 Marzo 2014, 13:36 pm
No entendi NADA!  :huh:


Título: Re: mktime y la edicion del tiempo directamente
Publicado por: patilanz en 27 Marzo 2014, 13:56 pm
Pues.. diferencia entre:

mktime()-3600*60*24
strtotime('-1 day');


Título: Re: mktime y la edicion del tiempo directamente
Publicado por: #!drvy en 27 Marzo 2014, 14:23 pm
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.

Código
  1. <?php
  2.  
  3. $mktime = mktime()-3600*60*24;
  4. echo $mktime,' - ',date('d/m/Y H:i:s',$mktime), '<br />';
  5.  
  6. $strtime = strtotime('-1 day');
  7. echo $strtime,' - ',date('d/m/Y H:i:s',$strtime), '<br />';
  8.  
  9. ?>

En este caso me devuelve
Código:
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:
Código
  1. $mktime = mktime()-(3600*24);

Saludos


Título: Re: mktime y la edicion del tiempo directamente
Publicado por: patilanz en 27 Marzo 2014, 18:56 pm
A bueno esto fue un despiste pero si le resto 3600*60 es lo mismo que usar strtotime() ?


Título: Re: mktime y la edicion del tiempo directamente
Publicado por: #!drvy en 27 Marzo 2014, 21:50 pm
Si. Pero si solo lo vas a utilizar para obtener el unix timestamp, utiliza time()

Saludos


Título: Re: mktime y la edicion del tiempo directamente
Publicado por: patilanz en 27 Marzo 2014, 22:38 pm
Vale pero igual queda la duda si existe diferencia en este caso entre

Código
  1. time()-3600*24;
  2.  
  3. strtotime('-1 day');
  4.  
  5. mktime()-3600*24;
  6.  

Entre estos 3 hay alguna diferencia y si no cual seria mas rápido?

Saludos


Título: Re: mktime y la edicion del tiempo directamente
Publicado por: #!drvy en 27 Marzo 2014, 22:54 pm
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
Citar
Esta 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
Citar
Devuelve 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


Título: Re: mktime y la edicion del tiempo directamente
Publicado por: patilanz en 28 Marzo 2014, 07:46 am
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?


Título: Re: mktime y la edicion del tiempo directamente
Publicado por: #!drvy en 28 Marzo 2014, 13:27 pm
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