mktime y la edicion del tiempo directamente

Iniciado por patilanz, 27 Marzo 2014, 12:20 PM

0 Miembros y 2 Visitantes están viendo este tema.

patilanz

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

Shell Root

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

patilanz

Pues.. diferencia entre:

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

#!drvy

#3
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 (php) [Seleccionar]
<?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:
Código (php) [Seleccionar]
$mktime = mktime()-(3600*24);

Saludos

patilanz

A bueno esto fue un despiste pero si le resto 3600*60 es lo mismo que usar strtotime() ?

#!drvy

Si. Pero si solo lo vas a utilizar para obtener el unix timestamp, utiliza time()

Saludos

patilanz

Vale pero igual queda la duda si existe diferencia en este caso entre

Código (cpp) [Seleccionar]
time()-3600*24;

strtotime('-1 day');

mktime()-3600*24;


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

Saludos

#!drvy

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

patilanz

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?

#!drvy

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