Foros del Web » Programando para Internet » PHP »

[Solucionado]Problemas de Strtotime o algo asi...

Estas en el tema de [Solucionado]Problemas de Strtotime o algo asi... en el foro de PHP en Foros del Web. Hola compañeros tengo problema con un code, el cual supuestamente debe de cambiar los dias y meses asi como años en intervalos de 30 dias, ...
  #1 (permalink)  
Antiguo 05/11/2008, 11:34
Avatar de Lenin_Germaine  
Fecha de Ingreso: junio-2007
Ubicación: Monterrey, Nuevo León
Mensajes: 82
Antigüedad: 16 años, 9 meses
Puntos: 0
[Solucionado]Problemas de Strtotime o algo asi...

Hola compañeros tengo problema con un code, el cual supuestamente debe de cambiar los dias y meses asi como años en intervalos de 30 dias, por ejemplo si meto
2005/01/30("30 de enero del 2005 gracias mysql") y si son tres pagos debe generar asi:

IdContrato Vencimiento Clave Concepto Numero Capital Interes Importe
185. 2005-01-30. 4men1. AD 1/3. 1/3. 837.5. 5662. 6500
185. 2005-02-28. 4men1. AD 2/3. 2/3 837.5. 5662. 6500
185. 2005-03-30. 4men1. AD 3/3. 3/3 837.5. 5662. 6500

Código php:
Ver original
  1. $venc = $ano."-".$mes."-".$dia;  
  2.          echo "primera fecha".$venc;
  3.          $tick = strtotime('2005-01-30');
  4.          $t2 = strtotime('+1 month', $tick);
  5.          echo " salida de t2: ".date('Y-m-d', $t2);

me da lo siguiente en el explorador:

primera fecha 2005-01-30 -- salida de t2: 2005-03-02

Oservaciones que he ehcho: el strtotime le he puesto '$variable' como parametro antes de asignarlo a tick y se regresa al año de 1970 ¿quién sabe porque? canijos lo hace pero bueno, ahora le puse la fecha a mano como en el code de arriba strtotime('2005-01-30') y lo que me hace es no aumentar 1 mes sino 2 maldito php no lo he terminado de entender es tan impredecible porq no actua como esperaba de acuerdo a las referencias q me dan mis compañeros abajo, alguna idea compañeros?

Última edición por Lenin_Germaine; 06/11/2008 a las 10:35 Razón: no me sale nada y eso q ya lei una y otra ve,z me muero !!!
  #2 (permalink)  
Antiguo 05/11/2008, 11:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Error de Ciclo

es mejor que uses strtotime para esto...

por ejemplo, tenemos la primer fecha..

Código PHP:
$tick strtotime('2008-11-5'); // o usa time() 
y ya, usando strtotime sumas o restas meses, si es lo que buscas...

Código PHP:
$t2 strtotime('+1 month'$tick);
$t3 strtotime('+2 month'$tick); 
y así, espero comprendas... suerte!

Referencia:

http://php.net/strtotime
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 05/11/2008, 11:40
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Por que no usas strtotime?

Te evitas todo eso...

Saludos

Bueno... por cuestión de segundo posteo primero Pateketrueke...

Haz lo que te dice

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com

Última edición por GatorV; 06/11/2008 a las 16:47
  #4 (permalink)  
Antiguo 05/11/2008, 11:57
Avatar de Lenin_Germaine  
Fecha de Ingreso: junio-2007
Ubicación: Monterrey, Nuevo León
Mensajes: 82
Antigüedad: 16 años, 9 meses
Puntos: 0
Hola pongo esto como tu me dices:

Código php:
Ver original
  1. $venc = $ano."-".$mes."-".$dia;  //iniciando por primera vez vencimiento para inserterse por 1 vez con la fecha de venc original
  2. echo "primera fecha".$venc;
  3. $tick = strtotime('$venc');
  4. $t2 = strtotime('+1 month', $tick);
  5. $t3 = strtotime('+2 month', $tick);
  6. echo "luego t2".$t2;
  7. echo "luego t3".$t3;

y me arroja el explorador :

primera fecha 2005-01-30 --l uego t2 2678400 luego t3 5356800
nada parecido a una fecha verdad?

Bueno ahora hago lo siguiente pero me lanza una fecha erronea, no se suponia q debía aumentar no retrasarse al año de 1970?

Código php:
Ver original
  1. $venc = $ano."-".$mes."-".$dia;  
  2. echo "primera fecha".$venc;
  3. $tick = strtotime('$venc');
  4. echo 'Valor de T1: '. date('Y-m-d', strtotime('+1 month', $tick));

y el explorador me lanza:
primera fecha 2005-01-30 -- Valor de T1: 1970-01-31



ay no me sale no me dan una manita tengo el siguiente code:

Código php:
Ver original
  1. $venc = $ano."-".$mes."-".$dia;  
  2. echo "primera fecha".$venc;
  3. $tick = strtotime('2005-01-30');
  4. $t2 = strtotime('+1 month', $tick);
  5. echo " salida de t2: ".date('Y-m-d', $t2);

y me da lo siguiente en el explorador:

primera fecha 2005-01-30 -- salida de t2: 2005-03-02

Oservaciones q he ehcho: el strttime le he puesto '$variable' como parametro antes de asignarlo a tick y se regresa al año de 1970 ¿quién sabe porque? canijos lo hace pero bueno, ahora le puse la fecha a mano como en el code de arriba strtotime('2005-01-30') y lo a me hace es no aumentar 1 mes sino 2 maldito php no lo he terminado de entender es tan impredecible porq no actua como esperaba de acuerdo a las referencias q me dan mis compañeros arriba, alguna idea compañeros?

Última edición por GatorV; 06/11/2008 a las 16:47
  #5 (permalink)  
Antiguo 06/11/2008, 10:34
Avatar de Lenin_Germaine  
Fecha de Ingreso: junio-2007
Ubicación: Monterrey, Nuevo León
Mensajes: 82
Antigüedad: 16 años, 9 meses
Puntos: 0
pues aqui está el código completito que ahora si me funciona y q me calcula muy bei las fechas, y no critiquen que salí solito del apuro pero muy cansado de tanto pensar porque me entretuve en pensar si el php estaba trabajando mal, que si no codificaba bien y bueno porque programaba en php si soy novatisimo en esto pero bueno hice mi luchita y aqui está para algun otro novato q ocupe una rutina q le calcule estas cosas:

Código php:
Ver original
  1. $conexion=mysql_connect("localhost","user","pass"")
  2.     or die("Problemas en la conexion");
  3.     mysql_select_db("base_de_datos",$conexion
  4.     or die("Problemas en la seleccion de la base de datos");
  5.    
  6. $venc = $ano."-".$mes."-".$dia;
  7.  
  8. for($cont=1;;$cont++)
  9.     {
  10.         if($cont>$pagos)
  11.          {
  12.              break;
  13.          }
  14.         else
  15.         {                    
  16.             $numero = $cont."/".$pagos;
  17.             $ad = "AD ".$numero;             
  18.              mysql_query("insert into detalledocumentos(IdContrato, Vencimiento, Clave, Concepto, Numero, Capital, Intereses, Importe)
  19.              values($idcontrato,'$venc', '4MEN1', '$ad', '$numero', $capital, $intereses, $importe)",$conexion)
  20.              or die("Problemas en el select, NO SE INSERTARON LOS REGISTROS".mysql_error());
  21.              
  22.              if($dia>27)
  23.                { if($dia<30)
  24.                     {
  25.                       $dia=30;
  26.                     }
  27.                 }
  28.              
  29.              $mes=$mes+1;                       //incrementa el mes      
  30.              if($mes>12)
  31.              { $mes=1;
  32.                $ano=$ano+1; }                   //si el mes es 13 se regresa a Enero
  33.              if($mes>1)
  34.              {  
  35.                 if($mes<3)
  36.                 {
  37.                             if ($ano%4!=0)
  38.                                $bis=0;
  39.                             else
  40.                                if ($ano%400==0)
  41.                                    $bis=1;
  42.                             else
  43.                                if ($ano%100==0)
  44.                                    $bis=0;
  45.                              else
  46.                                 $bis=1;              
  47.                  }
  48.              }         
  49.              if($bis==1 && ($mes>1 && $mes<3)) {$dia=29; }
  50.              if($bis==0 && ($mes>1 && $mes<3)) {$dia=28; }
  51.                      
  52.             $venc = $ano."-".$mes."-".$dia;          
  53.         }
  54.                    
  55.     }
  56. mysql_close($conexion);
  57. echo "ya se realizo la insercion de mensualidades";

Lo que hace basicamente es meter en una tablita registros mientras que $cont no sea mayor que $pagos de los cuales se genera la fecha de incremento en meses con sus dias respetando si es bisiesto o no y es todo, quiza sencillo para muchos compañeros pero ahi está.

Por cierto Agradezco muchisimo a mis compañeros que siempre están ayudando a este novato del php ya que sin su ayuda estaría en las sombras ahora, gracias por iluminarme a todos.

Última edición por GatorV; 06/11/2008 a las 16:46
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:49.