Comunidad de diseño web y desarrollo en internet online

Sumar fechas

Citar            
MensajeEscrito el 11 Nov 2005 04:40 pm
Esto no es una pregunta, ni duda, es un pequeño aporte que quiero hacer a este foro, está es una función que permite sumar fechas, pasandole como parámetro la cantidad de días que quieres sumar, regresa la fecha futura, encontré una implementación parecida en php.net (así que ahí también pueden enontrar esto), sólo que me hice mi propia versión, y ahora la comparto con ustedes:

Código :

/* 
      dateAdd(int)
      Función que calcula una fecha futura según la cantidad de días que se le proporcionen como argumento
      Versión original en http://www.php.net
      Adaptación: Aoyama 
   */
   function dateAdd($dias)
   {
      $mes = date("m");
      $anio = date("Y");
      $dia = date("d");
      $ultimo_dia = date( "d", mktime(0, 0, 0, $mes + 1, 0, $anio) ) ;
      $dias_adelanto = $dias;
      $siguiente = $dia + $dias_adelanto;
      if ($ultimo_dia < $siguiente)
      {
         $dia_final = $siguiente - $ultimo_dia;
         $mes++;
         if ($mes == '13')
         {
            $anio++;
            $mes = '01';
         }
         $fecha_final = $dia_final.'/'.$mes.'/'.$anio;         
      }
      else
      {
         $fecha_final = $siguiente .'/'.$mes.'/'.$anio;         
      }
      return $fecha_final;
   }


Y se usa así:

Código :

$fecha_futura = dateAdd(20);


Siendo 20 los días que en este ejemplo quiero adelantar. Espero les sirva ;)

Por Aoyama

BOFH

6224 de clabLevel

6 tutoriales
12 articulos

Genero:Masculino   Anime Bloggers Bastard Operators From Hell



Ultima edición por Aoyama el 31 May 2011 04:12 pm, editado 1 vez

Webdesigner & Developer, en mis ratos libres bebo café por litros.

firefox
Citar            
MensajeEscrito el 11 Nov 2005 08:21 pm
c00l

PD: Haz un tuto! :bate:

Por NEO_JP

BOFH

5724 de clabLevel

13 tutoriales
12 articulos

Genero:Masculino   Anime Bloggers Premio_Secretos Team Cristalab

Front-end Developer en Washington, DC

firefox
Citar            
MensajeEscrito el 11 Nov 2005 09:22 pm

the_NEO_JP escribió:

c00l

PD: Haz un tuto! :bate:


:lol: :lol: :lol: :lol: Neo no entendió XD
pos alguien que le explique... ^^ ^^ ^^

Por jhony192

791 de clabLevel

1 tutorial

Genero:Masculino  

Just Another Programmer

firefox
Citar            
MensajeEscrito el 11 Nov 2005 09:33 pm

the_NEO_JP escribió:

c00l

PD: Haz un tuto! :bate:


Mmm un tuto???
ya tengo uno pendiente

*Aoyama recuerda que debe terminar uno de javascript + css para impresiones personalizadas... :S

Por Aoyama

BOFH

6224 de clabLevel

6 tutoriales
12 articulos

Genero:Masculino   Anime Bloggers Bastard Operators From Hell

Webdesigner & Developer, en mis ratos libres bebo café por litros.

firefox
Citar            
MensajeEscrito el 12 Nov 2005 01:34 am

Aoyama escribió:

javascript + css para impresiones personalizadas

¿ uh ? O_o

Por NEO_JP

BOFH

5724 de clabLevel

13 tutoriales
12 articulos

Genero:Masculino   Anime Bloggers Premio_Secretos Team Cristalab

Front-end Developer en Washington, DC

firefox
Citar            
MensajeEscrito el 12 Nov 2005 08:17 pm
Juas! no me exprese bien... es algo que hice hace unos meses, usando Javasciprt y CSS para controlar lo que quiero imprimir ...

Por Aoyama

BOFH

6224 de clabLevel

6 tutoriales
12 articulos

Genero:Masculino   Anime Bloggers Bastard Operators From Hell

Webdesigner & Developer, en mis ratos libres bebo café por litros.

firefox
Citar            
MensajeEscrito el 15 Nov 2005 04:24 am

Código :

<?php
function cambiarFecha($dias){
   if ($dias>0){    
      return date('d/m/Y', strtotime('+'.$dias.' days'));
   }
   return date('d/m/Y', strtotime('-'.$dias.' days'));

}
echo "Hoy: ".cambiarFecha(0)."<br>";
echo "Menos 20: ".cambiarFecha(-20)."<br>";
echo "Mas 20: ".cambiarFecha(+20)."<br>";
echo "Mas 30: ".cambiarFecha(+30)."<br>";
echo "Mas 365: ".cambiarFecha(+365)."<br>";
?> 


^^

PD: es posible que jhony192 no entienda, le explico si se ejecuta un return las siguientes lineas de código dentro de la funcion NO se ejecuta :wink:

Edición: para colocar el PD :P

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 15 Nov 2005 02:00 pm
Maikel, como recomendación a ti y a todo el que lea esto, a las funciones se les hace UN SOLO return no 2, ni 3, ni 4, 1 y solo 1, claro tu codigo igual funcionara pero 1 solo return entra a aquello que llaman buenas practicas de programación :wink:


SAludos

Por Prozac

SWAT Team

1546 de clabLevel

1 tutorial

Genero:Masculino   SWAT

donde se regresa el viento

firefox
Citar            
MensajeEscrito el 15 Nov 2005 06:55 pm

Prozac escribió:

a las funciones se les hace UN SOLO return no 2, ni 3, ni 4
Eso depende del caso; por ejemplo, en las funciones recursivas, varios return resuelven mas facil un problema, evitando crear mas variables temporales.

Pero tienes razon, en general, es mejor que solo un punto sea la salida de la función

Por Freddie

BOFH

53 tutoriales
597 articulos
43 ejemplos

Genero:Masculino   Admin

Conserje de Cristalab

firefox
Citar            
MensajeEscrito el 15 Nov 2005 07:22 pm
no pude entender el code :cry: :cry: :cry:

pero lo pude mejorar XD

Código :

<?php
function cambiarfecha($dias){
return date('d/m/Y', strtotime($dias.' days'));
}
?>
Hoy: <?=cambiarFecha('0')?><br />
Menos 20: <?=cambiarfecha('-20')?><br />
Mas 20: <?=cambiarfecha('+20')?><br />
Mas 30: <?=cambiarfecha('+30')?><br />
Mas 365: <?=cambiarfecha('+365')?><br />


Ahora di que me odias ^^ ^^ ^^

Por jhony192

791 de clabLevel

1 tutorial

Genero:Masculino  

Just Another Programmer

firefox
Citar            
MensajeEscrito el 15 Nov 2005 07:45 pm

jhony192 escribió:

Ahora di que me odias ^^ ^^ ^^
Te queremos jhony192
Ahora toma esta moneda de 3 centavos, ve y comprate un helado ^^

Por Freddie

BOFH

53 tutoriales
597 articulos
43 ejemplos

Genero:Masculino   Admin

Conserje de Cristalab

firefox
Citar            
MensajeEscrito el 15 Nov 2005 07:49 pm

jhony192 escribió:

Ahora di que me odias ^^ ^^ ^^

[modo_sarcasm]Alguien tiene que reconocer tu aporte jhony192... ¬_¬[/modo_sarcasm]
Muy bien, creo que este tema ayudará a muchos por aca... de hecho, lo convierto en post it (las troleadas y offtopic serán quitadas...).

P.D. Sephirot, muy buena iniciativa!

Por Pedro

BOFH

3017 de clabLevel

3 tutoriales
6 articulos

  Bastard Operators From Hell

Honduras

firefox
Citar            
MensajeEscrito el 23 Ene 2008 11:58 am
Me parece mas practico pasar las fechas a segundos y luego restarlas, sumarlas etc

Por sk8erboi

78 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 Ene 2008 05:26 pm
esto me va a servir muchas gracias.!

Por jripper

228 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 29 Sep 2008 08:43 pm
No es por ser espezo ni mucho menos, pero probando probando, me di cuenta que al sumarle 33 días a la fecha de hoy 29/09/2008 me dio como resultado 32/10/2008 :? me extraño un poco tal fecha pues en mi calendario registra que octubre solo consta de 31 días, xD y lo mismo iba pasando a medida que aumentaba los días, en fin se que no es muy bonito criticar sin aportar, pero aun me encuentro craneando como resolver el pequeño impase :wink:

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

firefox
Citar            
MensajeEscrito el 29 Sep 2008 09:32 pm
Sorry yo me referi al codigo original publicado por Aoyama :oops: al seguir leyendo los post me di cuanta que ya lo habian resuelto perdon por el desliz xD

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

firefox
Citar            
MensajeEscrito el 24 Oct 2008 01:09 pm
Otra opción es usar las funciones de calendario de PHP (si si... nadie se acueda de ellas)

La idea es pasar nuestro formato de fecha (llamado gregoriano) a otro formato (llamado Juliano) en donde representa la fecha como un numero entero (este num es la cantidad de dias pasados desde tal fecha q no recuerdo)...

Entonces

Código :

$juliano = gregoriantojd($mes,$dia,$año);
//kiero sumar 10 dias
echo jdtogregorian($juliano+10);


La funcion jdtogregorian siempre te devolvera una fecha valida pq tiene en cuenta el principio y fin del mes y los años bisiestos.

Usos?? muchos... se puede hacer un Calendario dinamico con Ajax y Php... se puede hacer un sistema de periodicidad de eventos facilmente (parecido al outlook), etc, etc.

En fin.. tiene cosas muy piolas... mas info ver la documentacion

Saludos

Por 3w

145 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 19 Jun 2009 02:46 am
Que aplicaciones practicas tiene??

Por svengel

1 de clabLevel



 

Mexico

msie7
Citar            
MensajeEscrito el 08 Jul 2009 03:10 am

Prozac escribió:

Maikel, como recomendación a ti y a todo el que lea esto, a las funciones se les hace UN SOLO return no 2, ni 3, ni 4, 1 y solo 1, claro tu codigo igual funcionara pero 1 solo return entra a aquello que llaman buenas practicas de programación :wink:

SAludos


Maikel, escribio bien el codigo y si revisas bien, hay un solo return, no dos ni tres, lo que el realizo, fue evitar usar mas varial}bles de las nesesarias, ya que es lo mismo hacer:
$fecha = Date(blabla ,blabla ,blabla);
return $fecha;

que:

return Date(blabla ,blabla ,blabla);

pues construira el objeto y lo enviara = sin problemas

y si hay lenguajes donde se pueden enviar mas de un return por ejemplo python

Por sam_games

0 de clabLevel



 

msie7
Citar            
MensajeEscrito el 20 Sep 2009 07:10 am
Otra Forma Que pueden utilizar.. ya nada mas como dato es preguntandole a mysql trae funcion para tratar fechas muy buenas no esta de mas que le hechen una mirada.. solo verifiquen que su server las tiene avilitadas antes de menter alguna a produccion se los digo por experiencia :(.. pero las funciones son vastante chidas.. bueno le dejo la funcion que suma dias en mysql

Código MySQL :

SELECT ADDDATE(curdate(), 30) diafactura

SELECT ADDDATE('2009-02-25',5) diafactura


colo que podriamos hacer (previa conexion a mysql)

Código PHP :

$dia=mysql_fetch_array(mysql_query("SELECT ADDDATE('2009-02-25',5) diafactura"));
echo $dia['diafactura'];


;)

Por wariodiaz

55 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Oct 2009 05:57 pm
Hola amigos,

Quizá mi comentario ya lo haya hecho alguien, aunque no lo he encontrado con el buscador, o quizá no sea este el lugar y deba estar en AS no en PHP.
Estoy preparando un sistema para controlar un calendario de clases y al programarlo, me he dado cuenta que en AS2 podía restar milisegundos a una fecha pero no sumarlos, porque encontraba un error. Después de tener todas las funciones preparadas, de suma y resta, tonto de mí sólo hice comprobaciones con restas y funcionaba bien, cuando he probado a sumar me he encontrado los problemas. Como es habitual, me he dirigido al foro, a ver si alguien tenía una solución y he aterrizado en este hilo.
Después de ver las respuestas, muy buenas, por cierto, no me he resignado y me he puesto a probar con AS2, ya que me extrañaba que no se pudiera hacer.
Haciendo pruebas, he solucionado el tema sencillamente restando números negativos.
Así que, para sumar fechas, es tan sencillo como restar milisegundos a la fecha con valor negativo:
var fechActual = new Date();
var fechaRef:Date = new Date(fechActual - (- 86400000)); //86400000 milisegundos por día

Un saludo

Por flip_sp

18 de clabLevel



 

msie7
Citar            
MensajeEscrito el 18 Mar 2010 06:38 pm
Funcion para sumar dias, meses o años a una fecha.

Código PHP :

/*
sumar  dias, meses, años a un afecha
$fecha = "02/04/2008"; //mes/dia/año
$fecha_actualizada = dateadd($fecha,1,0,0,0,0,0); // suma 1 dia a la fecha
*/
function dateadd($date, $dd=0, $mm=0, $yy=0, $hh=0, $mn=0, $ss=0){
   $date_r = getdate(strtotime($date));
   //$date_result = date("m/d/Y h:i:s", mktime(($date_r["hours"]+$hh),($date_r["minutes"]+$mn),($date_r["seconds"]+$ss),($date_r["mon"]+$mm),($date_r["mday"]+$dd),($date_r["year"]+$yy)));
   $date_result = (mktime(($date_r["hours"]+$hh),($date_r["minutes"]+$mn),($date_r["seconds"]+$ss),($date_r["mon"]+$mm),($date_r["mday"]+$dd),($date_r["year"]+$yy)));
   return $date_result;
}

Por vicman

46 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Sep 2010 06:34 pm
<?php
function cambiarfecha($dias){
return date('d/m/Y', strtotime($dias.' days'));

}

?>
Hoy: <?=cambiarFecha('0')?><br />
Menos 20: <?=cambiarfecha('-20')?><br />
Mas 20: <?=cambiarfecha('+20')?><br />
Mas 30: <?=cambiarfecha('+30')?><br />
Mas 365: <?=cambiarfecha('+365')?><br />

En esta función como indicas otra fehca que no sea la del dia de hoy?

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 19 Ene 2011 06:15 pm
Todo esto de las fechas no es más que saber un poco de matemáticas y calcular con unixtime.

Ej:

Código PHP :

<?php
$hoy = time();
print date('Y-m-d H:i:s', $hoy); // Imprime timestamp de hoy

// Timestamp en 2 días más
// Lo que hacemos en este caso es transformar los segundos en horas, las horas en días, sumamos días. Transformamos días en horas y las horas en segundos
$ts = ((($hoy/3600/24)+2)*3600*24);
print date('Y-m-d H:i:s', $ts);

// Timestamp hace 36 horas atrás
// Lo que hacemos en este caso es transformar los segundos en horas, restamos horas. Transformamos horas en segundos
$ts = ((($hoy/3600)-36)*3600);
print date('Y-m-d H:i:s', $ts);
?>

Como enseñaban en el colegio: de menos a más, se divide y de más a menos, se multiplica.

Personalmente prefiero hacerlo así, ya que se tiene mayor control sobre los cálculos de los tiempos con exactitud, en cuanto a fecha y hora.

Por w00p

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Ene 2011 05:41 pm
como me gusta que dia a dia mejoran el core de php
un ejemplo de lo que se quiere lograr

Código PHP :

//si no se agrega la fecha se asume a que se refiere a la fecha de actual
$fecha = new DateTime('1986-01-01');
//Agregamos un intervalo de tiempo de 361 Dias
// tambien se puede hacer con minutos, segundos, horas , años
// puede ser todo junto incluso
$fecha->add(new DateInterval('P361D'));
//mostramos el formato en que queremos visualizar
echo $fecha->format('d/m/Y');

Esta funciona con php 5.3 en adelante ahora creo que la version 5.2 tambien incorpora pero seria que hagan pruebas

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.