Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema strtotime con fecha "31 de Julio 2013"

Estas en el tema de Problema strtotime con fecha "31 de Julio 2013" en el foro de PHP en Foros del Web. hola compañeros como estan ? espero super bien. Tengo un problemita super raro con una fecha en php necesito restar un mes a una fecha ...
  #1 (permalink)  
Antiguo 21/08/2013, 08:16
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 12 años, 11 meses
Puntos: 76
Problema strtotime con fecha "31 de Julio 2013"

hola

compañeros como estan ?

espero super bien.


Tengo un problemita super raro con una fecha en php

necesito restar un mes a una fecha

el codigo aqui :
Código PHP:
Ver original
  1. $timeDate = strtotime("-1 month",strtotime("31-07-2013"));
  2. $date       = date("d-m-Y",$timeDate);


Pero me imprime 01-07-2013 cuando deberia haber mostrado 31-06-2013 , pero bueno resulta que Junio no tiene dia 31 , entonces realmente el resultado final deberia ser 30-06-2013

como solucionarlo ?
  #2 (permalink)  
Antiguo 21/08/2013, 08:28
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema strtotime con fecha "31 de Julio 2013"

Pues si está curioso ese comportamiento, parece que -1 month restara sólo 30 días y no los días correspondientes por mes.

Revisa el manual de strtotime() tal vez ahí se explique el por qué.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 21/08/2013, 08:37
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Problema strtotime con fecha "31 de Julio 2013"

Leyendo los comentarios de la documentación de strtotime llegue a este link; según lo que leo el comportamiento que obtienes es correcto

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #4 (permalink)  
Antiguo 21/08/2013, 08:41
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 12 años, 11 meses
Puntos: 76
Respuesta: Problema strtotime con fecha "31 de Julio 2013"

Gracias compañeros


voy a mirar
  #5 (permalink)  
Antiguo 21/08/2013, 09:55
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 12 años, 11 meses
Puntos: 76
Respuesta: Problema strtotime con fecha "31 de Julio 2013"

hola

lo solucione de la siguiente manera ... es lo unico que se me ocurrio

Código PHP:
Ver original
  1. function getMonthDays($Month, $Year)
  2.     {
  3.        //Si la extensión que mencioné está instalada, usamos esa.
  4.        if( is_callable("cal_days_in_month"))
  5.        {
  6.           return cal_days_in_month(CAL_GREGORIAN, $Month, $Year);
  7.        }
  8.        else
  9.        {
  10.           //Lo hacemos a mi manera.
  11.           return date("d",mktime(0,0,0,$Month+1,0,$Year));
  12.        }
  13.     }
  14.  
  15.  
  16.     function getFechaAnteriorExacta($fecha)
  17.     {
  18.         $fechaSalida            =   date("Y-m-d",strtotime($fecha));
  19.  
  20.         $datosFechafin2 =   explode("-",$fechaSalida);
  21.  
  22.         //segun el día que me retorne valido que sea 31
  23.  
  24.         if($datosFechafin2[2] == "31")
  25.         {
  26.             $nuevaFechaF    =   strtotime("-1 month",mktime(0,0,0,$datosFechafin2[1],1,$datosFechafin2[0]));
  27.             $mes            =    date("m",$nuevaFechaF);
  28.             $year           =    date("Y",$nuevaFechaF);
  29.             $diasDelMes     =   $this->getMonthDays($mes, $year);
  30.             //echo $diasDelMes;
  31.             $nuevafechaFin  =   date($diasDelMes.'-m-Y',$nuevaFechaF); 
  32.         }
  33.         else
  34.         {
  35.             $nuevaFechaF    =   strtotime("-1 month",strtotime($fechaSalida)); 
  36.             $nuevafechaFin  =   date('d-m-Y',$nuevaFechaF);
  37.         }
  38.  
  39.         return $nuevafechaFin;
  40.     }
  41.  
  42.  
  43. ///ejemplo de uso
  44.  
  45. $fechaActual      = "2013-07-31";
  46. $fechaAnterior   = getFechaAnteriorExacta($fechaActual);
  47.  
  48. //resultado 30-06-2013

simplemente valido que si el dia de la fecha a operar es 31 restele normal el mes anterior y capture la cantidad de días de ese mes anterior.


Gracias igualmente por sus comentarios .

Última edición por informacionsys; 22/08/2013 a las 06:52

Etiquetas: fecha, strtotime
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 23:37.