PHP - restar fechas

   
Vista:

restar fechas

Publicado por movick (824 intervenciones) el 29/09/2014 02:59:32
Necesito restar una fecha de nacimiento con la fecha actual, para conocer la edad, este es el codigo:
pero no lo esta haciendo, y tampoco imprime la diferencia.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<TR>
	<td>Fecha de Nac.:</td>
    <td><input type="text" size=10 maxlength=10 name="fechanac" onKeyUp="mascara(this,'-',patron,true)" ; onFocus="siguienteCampo ='direccion'">
<a href=javascript:show_calendar('form1.fechanac');
onMouseOver="window.status='Date Picker';
overlib('Haga Click aqui para escoger una fecha del calendario.'); 
return true;" onMouseOut="window.status=''; nd();
return true;"><img src="iconos/calendar.gif" align=center width=24 height=22 border=0></a></td>
</TR>
 
<?php
 
echo $anio = substr($_POST['fechanac'],0,4);
echo $mes = substr($_POST['fechanac'],5,2);
echo $dia = substr($_POST['fechanac'],8,2);
      echo $fechareparacion = $dia."-".$mes."-".$anio;
	   $diff = abs(strtotime($fechareparacion) - strtotime($hoy1));
        $anios = floor($diff / (365*60*60*24));
        $meses = floor(($diff - $anios * 365*60*60*24) / (30*60*60*24));
        $dias = floor(($diff - $anios * 365*60*60*24 - $meses*30*60*60*24)/ (60*60*24));
	   echo $totalTiempo = $dias."-".$meses."-".$anios;
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

restar fechas

Publicado por xve (5515 intervenciones) el 29/09/2014 09:26:58
Hola Movick, no entiendo muy bien tu código... aqui tienes dos ejemplos para saber la edad de una persona segun la fecha de nacimiento.

http://www.lawebdelprogramador.com/codigo/PHP/2249-Obtener_la_edad_de_una_persona.html
http://www.lawebdelprogramador.com/codigo/PHP/431-Calculo_de_edad.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

restar fechas

Publicado por movick (824 intervenciones) el 29/09/2014 22:33:33
hola xve, bueno este codigo que envié si funciona, pero no se porque en este caso no lo hace, la fecha de nacimiento la coloque con un Datepicker, o sea que no es necesario que el usuario la escriba.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

restar fechas

Publicado por xve (5515 intervenciones) el 30/09/2014 08:22:21
Podría ser que el formato de la fecha no es el esperado por tu código?

Esperas que los primeros 4 dígitos sean el año... la fecha la recibe con el formato: yyyy-mm-dd?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

restar fechas

Publicado por movick (824 intervenciones) el 03/10/2014 03:57:49
bueno cambie el codigo por este otro:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
function isValidDate(day,month,year)
{
    var dteDate;
 
    // En javascript, el mes empieza en la posicion 0 y termina en la 11 
    //   siendo 0 el mes de enero
    // Por esta razon, tenemos que restar 1 al mes
    month=month-1;
    // Establecemos un objeto Data con los valore recibidos
    // Los parametros son: año, mes, dia, hora, minuto y segundos
    // getDate(); devuelve el dia como un entero entre 1 y 31
    // getDay(); devuelve un num del 0 al 6 indicando siel dia es lunes,
    //   martes, miercoles ...
    // getHours(); Devuelve la hora
    // getMinutes(); Devuelve los minutos
    // getMonth(); devuelve el mes como un numero de 0 a 11
    // getTime(); Devuelve el tiempo transcurrido en milisegundos desde el 1
    //   de enero de 1970 hasta el momento definido en el objeto date
    // setTime(); Establece una fecha pasandole en milisegundos el valor de esta.
    // getYear(); devuelve el año
    // getFullYear(); devuelve el año
    dteDate=new Date(year,month,day);
    //alert(((day==dteDate.getDate()) && (month==dteDate.getMonth()) && (year==dteDate.getFullYear())));
    //Devuelva true o false...
    return ((day==dteDate.getDate()) && (month==dteDate.getMonth()) && (year==dteDate.getFullYear()));
}
 
 
 
function calcularEdad()
{
    var fecha=document.getElementById("user_date").value;
 
        var values=fecha.split("/");
        var dia = values[0];
        var mes = values[1];
        var ano = values[2];
        fecha=	dia+"/"+mes	+"/"+ano;
 
    if(validate_fecha(fecha)==true)
    {
        // Si la fecha es correcta, calculamos la edad
        var values=fecha.split("/");
 
		var dia = values[0];
        var mes = values[1];
        var ano = values[2];
		alert(ano);
        // cogemos los valores actuales
        var fecha_hoy = new Date();
        var ahora_ano = fecha_hoy.getYear();
        var ahora_mes = fecha_hoy.getMonth();
        var ahora_dia = fecha_hoy.getDate();
 
        // realizamos el calculo
        var edad = (ahora_ano + 1900) - ano;
        if ( ahora_mes < (mes - 1))
        {
            edad--;
        }
        if (((mes - 1) == ahora_mes) && (ahora_dia < dia))
        {
            edad--;
        }
        if (edad > 1900)
        {
            edad -= 1900;
        }
 
        document.getElementById("result").innerHTML="Tienes "+edad+" años";
    }else{
        document.getElementById("result").innerHTML="La fecha "+fecha+" es incorrecta";
    }
}

y lo aplicoa al input type text este:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<TR>
	<td>Fecha de Nac.:</td>
    <td><input type="text" size=10 maxlength=10 name="fechanac" onblur="calcularEdad(this.value);" onKeyUp="mascara(this,'-',patron,true)" id="user_date">
 
 
<?php
 
//fecha actual 
 
$dia=date('j');
$mes=date('n');
$ano=date('Y');
 
//fecha de nacimiento 
 
if (isset($_POST['fechanac']) and $_POST['fechanac']!="" ){
 $fecha=$_POST['fechanac'];
 $dianaz= substr($fecha,0,2);
 $mesnaz= substr($fecha,3,2);
 $anonaz= substr($fecha,6,4);
 /*
$dianaz=2; 
$mesnaz=6; 
$anonaz=1983; 
*/
}
else
{
 $dianaz= "";
 $mesnaz= "";
 $anonaz= "";
}
//si el mes es el mismo pero el dia inferior aun no ha cumplido años, le quitaremos un año al actual 
 
 
if (($mesnaz == $mes) && ($dianaz > $dia)) {
$ano=($ano-1); }
 
 
//si el mes es superior al actual tampoco abra cumplido años, por eso le quitamos un año al actual 
 
if ($mesnaz > $mes) {
$ano=($ano-1);}
 
//ya no habria mas condiciones, ahora simplemente restamos los años y mostramos el resultado como su edad 
 
$edad=($ano-$anonaz);
if (isset($_POST['fechanac']) and $_POST['fechanac']!=""){
print "Su edad es: ".$edad." a&ntilde;os.";
}else
{
print "No hay datos";
}
 
?>
</td>
</TR>
pero no funciona:
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar