PHP - Restar fecha de hoy con otra

 
Vista:
sin imagen de perfil
Val: 75
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Restar fecha de hoy con otra

Publicado por Monica (32 intervenciones) el 01/10/2019 11:56:31
Buenos días, lo primero de todo es deciros que estoy empezando en este mundo de php y hay cosas en las que aún me pierdo.
Tengo una tabla en php con datos que previamente he importado a la base de datos. Uno de estos campos que se llama contador, es la diferencia entre una fecha de envío y la fecha de hoy, pero no se como hacer que esa diferencia (en días) se muestre en la tabla. O en el formulario de edición de los datos de la tabla.
La tabla con los datos que se muestra es esta
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
<p>Resultados <?php echo $datos->num_rows; ?></p>
    <div class="row table-responsive">
	<table class="display" id="mitabla" border="1"  style="width:100%" >
 
	<thead style='background-color:#292929;'>
 
	    <th align="center"><font color=#FFFFFF>Marcar</th>
		<th align="left"><font color=#FFFFFF>N&#186; Cliente</th>
		<th align="left"><font color=#FFFFFF>Nombre completo</th>
		<th align="left"><font color=#FFFFFF>Zona de Ventas</th>
		<th align="left"><font color=#FFFFFF>Ramo Inicial</th>
		<th align="left"><font color=#FFFFFF>Ramo Definitivo</th>
		<th align="left"><font color=#FFFFFF>Tipo Contrato</th>
		<th align="left"><font color=#FFFFFF>Fecha Env&#237;o</th>
		<th align="left"><font color=#FFFFFF>Fecha Recepci&#243;n</th>
		<th align="left"><font color=#FFFFFF>Contador &#40;Fechas&#41;</th>
		<th align="left"><font color=#FFFFFF>Comentarios </th>
		<th align="left"><font color=#FFFFFF>Anexo Contrato</th>
		<th align="left"><font color=#FFFFFF>Escalado Distrib.</th>
		<th align="left"><font color=#FFFFFF>&#37; Bonus Distrib.</th>
		<th align="left"><font color=#FFFFFF>Factur Anual Distrib.</th>
		<th align="left"><font color=#FFFFFF>Anotaciones Internas</th>
		<th align="left"><font color=#FFFFFF>Anexo Interno</th>
		<th align="center"><font color=#FFFFFF>Editar</th>
		<th align="center"><font color=#FFFFFF>Borrar</th>
		<th align="center"><font color=#FFFFFF>Guardar</th>
 
	</thead>
 
	<?php while($d= $datos->fetch_object()):?>
 
 
		<tr>
		<td align="center"><input type="checkbox" name="casilla[]" value="<?php echo $d->id_contrpen; ?>"class="check"></td>
 
		<td align="left"><?php echo $d->noCliente; ?></td>
		<td align="left"><?php echo $d->nombreCliente;?></td>
		<td align="left"><?php echo $d->zv; ?></td>
		<td align="left"><?php echo $d->ramo; ?></td>
		<td align="left"><?php echo $d->ramoDef; ?></td>
		<td align="left"><?php echo $d->tipoContr ; ?></td>
		<td align="right"><?php echo $d->fechaEnvio; ?></td>
		<td align="right"><?php echo $d->fechaRecep; ?></td>
		<td align="left"><?php echo $d->contador; ?></td>
		<td align="left"><?php echo $d->comentarios; ?></td>
		<td align="left"><?php echo $d->anexo; ?></td>
		<td align="left"><?php echo $d->anexoDistrEscal; ?></td>
		<td align="left"><?php echo $d->anexoDistrBonus; ?></td>
		<td align="left"><?php echo $d->anexoDistrFact; ?></td>
		<td align="left"><?php echo $d->anotaciones; ?></td>
		<td align="left"><?php echo $d->anexoInter; ?></td>
		<td align="center"><a href="modificarContrPend.php?id_contrpen=<?php echo $d-> id_contrpen; ?>"><span class="glyphicon glyphicon-pencil"></span></a></td>
		<td align="center"><a href="#" data-href="eliminarContrPend.php?id_contrpen=<?php echo $d->id_contrpen; ?>" data-toggle="modal" data-target="#confirm-delete"><span class="glyphicon glyphicon-trash"></span></a></td>
		<td align="center"><a href="modificarContrPendBackup.php?id_contrpen=<?php echo $d->id_contrpen; ?>" ><span class="glyphicon glyphicon-floppy-disk"></span></a></td>
		</tr>
 
	<?php endwhile; ?>
</table>
</form>
 
        <?php else:?>
	    <h3>No hay Datos</h3>
        <?php endif; ?>
</div>

Y el formulario de edición es 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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<h2 align="center"><font ><strong>MODIFICAR REGISTRO </strong></font></h2>
 
	<br />
 
			<form class="form-horizontal" method="POST" action="updateContrPend.php" enctype="multipart/form-data" autocomplete="off">
				<div class="form-group">
					<label for="noCliente" class="col-sm-2 control-label">Nº de Cliente</label>
					<div class="col-sm-10">
						<input type="text" class="form-control" id="cliente" name="noCliente" placeholder="Nº Cliente" value="<?php echo $row['noCliente']; ?>" required>
					</div>
				</div>
 
				<input type="hidden" id="id_contrpen" name="id_contrpen" value="<?php echo $row['id_contrpen']; ?>" />
 
				<div class="form-group">
					<label for="nombre" class="col-sm-2 control-label">Nombre de Cliente</label>
					<div class="col-sm-10">
						<input type="text" class="form-control" id="nombre" name="nombreCliente" placeholder="Nombre de Cliente" value="<?php echo $row['nombreCliente']; ?>"  required>
					</div>
				</div>
 
				<div class="form-group">
					<label for="zv" class="col-sm-2 control-label">Zona de Ventas</label>
					<div class="col-sm-10">
						<input type="number" class="form-control" id="zv" name="zv" placeholder="Zona de Ventas" value="<?php echo $row['zv']; ?>" >
					</div>
				</div>
 
				<div class="form-group">
					<label for="contrBonus" class="col-sm-2 control-label">Ramo</label>
					<div class="col-sm-10">
							<input type="text" class="form-control" id="ramo" name="ramo" placeholder="Ramo" value="<?php echo $row['ramo']; ?>" >
					</div>
				</div>
 
				<div class="form-group">
					<label for="ramoDef " class="col-sm-2 control-label">Ramo Definitivo</label>
				<div class="col-sm-10">
							<input type="text" class="form-control" id="ramoDef" name="ramoDef" placeholder="Ramo Definitivo" value="<?php echo $row['ramoDef']; ?>" >
					</div>
				</div>
				<div class="form-group">
					<label for="tipoContr" class="col-sm-2 control-label">Tipo de Contrato</label>
					<div class="col-sm-10">
						<select class="form-control" id="tipoContr" name="tipoContr">
							<option value="Contrato Marco" <?php if($row['tipoContr']=='Contrato Marco') echo 'selected'; ?>>Contrato Marco</option>
							<option value="Anexo IMC" <?php if($row['tipoContr']=='Anexo IMC') echo 'selected'; ?>>Anexo IMC</option>
							<option value="Anexo Distribuidor" <?php if($row['tipoContr']=='Anexo Distribuidor') echo 'selected'; ?>>Anexo Distribuidor</option>
							<option value="Anexo Gasistas" <?php if($row['tipoContr']=='Anexo Gasistas') echo 'selected'; ?>>Anexo Gasistas</option>
							<option value="Anexo del Anexo" <?php if($row['tipoContr']=='Anexo del Anexo') echo 'selected'; ?>>Anexo del Anexo</option>
							<option value="Otros" <?php if($row['tipoContr']=='Otros') echo 'selected'; ?>>Otros</option>
						</select>
					</div>
				</div>
 
 
				<div class="form-group">
					<label for="fechaEnvio" class="col-sm-2 control-label">Fecha Envío</label>
				    <div class="col-sm-10">
							<input type="date" class="form-control" id="fechaEnvio" name="fechaEnvio" placeholder="fechaEnvio" value="<?php echo $row['fechaEnvio']; ?>" >
					</div>
				</div>
 
				<div class="form-group">
					<label for="fechaRecep" class="col-sm-2 control-label">Fecha Recepción</label>
				    <div class="col-sm-10">
							<input type="date" class="form-control" id="fechaRecep" name="fechaRecep" placeholder="fechaRecep" value="<?php echo $row['fechaRecep']; ?>" >
					</div>
				</div>
 
				<div class="form-group">
					<label for="contador" class="col-sm-2 control-label">Contador</label>
				    <div class="col-sm-10">
							<input type="number" class="form-control" id="contador " name="contador " placeholder="Contador" value="echo $row['contador']; ?>">
							</div>
				</div>
 
				<div class="form-group">
					<label for="comentarios " class="col-sm-2 control-label">Comentarios</label>
				    <div class="col-sm-10">
							<input type="text" class="form-control" id="comentarios " name="comentarios " placeholder="Comentarios" value="<?php echo $row['comentarios']; ?>" >
					</div>
				</div>
 
				<div class="form-group">
					<label for="archivo" class="col-sm-2 control-label">Anexo</label>
					<div class="col-sm-10">
						<input type="file" class="form-control" id="archivo" name="archivo">
 
						<?php
							$path = "files/".$id_contrpen;
							if(file_exists($path)){
								$directorio = opendir($path);
								while ($archivo = readdir($directorio))
								{
									if (!is_dir($archivo)){
										echo "<div data='".$path."/".$archivo."'><a href='".$path."/".$archivo."' title='Ver Archivo Adjunto'><span class='glyphicon glyphicon-picture'></span></a>";
										echo "$archivo <a href='#' class='delete' title='Borrar Archivo Adjunto' ><span class='glyphicon glyphicon-trash' aria-hidden='true'></span></a></div>";
										echo "<img src='files/$id_contrpen/$archivo' width='200' />";
									}
								}
							}
 
						?>
					</div>
				</div>
 
 
				<div class="form-group">
					<label for="anexoDistrEscal " class="col-sm-2 control-label">Anexo Distribuidor Escalado</label>
				    <div class="col-sm-10">
							<input type="text" class="form-control" id="anexoDistrEscal " name="anexoDistrEscal " placeholder="Anexo Distribuidor Escalado" value="<?php echo $row['anexoDistrEscal']; ?>" >
					</div>
				</div>
 
 
				<div class="form-group">
					<label for="anexoDistrBonus " class="col-sm-2 control-label">Anexo Distribuidor % Bonus</label>
				    <div class="col-sm-10">
							<input type="text" class="form-control" id="anexoDistrBonus " name="anexoDistrBonus " placeholder="Anexo Distribuidor % Bonus" value="<?php echo $row['anexoDistrBonus']; ?>" >
					</div>
				</div>
 
				<div class="form-group">
					<label for="anexoDistrFact " class="col-sm-2 control-label">Anexo Distribuidor Facturación Anual</label>
				    <div class="col-sm-10">
							<input type="text" class="form-control" id="anexoDistrFact " name="anexoDistrFact " placeholder="Anexo Distribuidor Facturación Anual" value="<?php echo $row['anexoDistrFact']; ?>" >
					</div>
				</div>
 
 
				<div class="form-group">
					<label for="anotaciones " class="col-sm-2 control-label">Anotaciones</label>
				    <div class="col-sm-10">
							<input type="text" class="form-control" id="anotaciones " name="anotaciones " placeholder="Anotaciones" value="<?php echo $row['anotaciones']; ?>" >
					</div>
				</div>
 
				<div class="form-group">
					<label for="anexoInter" class="col-sm-2 control-label">Anexo Interno</label>
					<div class="col-sm-10">
						<input type="text" class="form-control" id="anexoInter" name="anexoInter" placeholder="Anexo Interno" value="<?php echo $row['anexoInter']; ?>" >
					</div>
				</div>
 
				<div class="form-group">
					<div class="col-sm-offset-2 col-sm-10">
						<a href="contratospendientes.php" class="btn btn-default">Volver</a>
						<button type="submit" class="btn btn-primary">Guardar</button>
					</div>
				</div>
			</form>

Como puedo hacer para que el campo "Contador" muestre fecha de hoy menos fecha de envio?
Gracias de antemano.
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 joel
Val: 2.370
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Restar fecha de hoy con otra

Publicado por joel (695 intervenciones) el 01/10/2019 15:13:50
Hola Monica, pero el campo contador es un campo numérico... no puedes mostrar ahí una fecha... puedes comentarnos con mas detalle?
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
sin imagen de perfil
Val: 75
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Restar fecha de hoy con otra

Publicado por Monica (32 intervenciones) el 01/10/2019 15:29:39
Hola,
SI, el campo contador es numérico. Es la resta de la fecha de envío <td ><?php echo $d->fechaEnvio; ?></td> que tiene formato fecha
aaaa-mm-dd y la fecha de hoy.
Lo que necesito hacer es que al introducir la fecha de envío en el formulario, en el campo contador salga en días, la resta entre fecha de envío y la fecha actual, sin que el usuario tenga que hacer nada. Que ese campo se rellene automaticamente con ese dato. Como pasa en excel si pones una formula.

De esta forma en la página principal donde están todos los datos el usuario ve ese dato de contador, y si entra a modificar el registro y cambia la fechaEnvio, se cambie también el campo contador. Y si mete un registro nuevo, al poner la fecaEnvio, el dato contador salga directamente.

No se si me he explicado correctamente. Pero espero que lo hayas entendido. Te he adjuntado un par de pantallazos para que veas donde se mostraría este dato.
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 joel
Val: 2.370
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Restar fecha de hoy con otra

Publicado por joel (695 intervenciones) el 01/10/2019 15:39:56
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
sin imagen de perfil
Val: 75
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Restar fecha de hoy con otra

Publicado por Monica (32 intervenciones) el 02/10/2019 17:28:55
Hola Joel,

He utilizado tu script con mis datos, la fecha inicial es la fecha actual (es la fecha actual del sistema) y la fecha final es la fecha de envío, que la coge de la base de datos como aaaa-mm-dd y me da el error de que la fecha de envío es incorrecta, quizás sea por el formato de fecha. Te pongo lo que he hecho, me estaré equivocando en algo seguro pero no se muy bien en qué. A ver si me puedes ayudar por favor.

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
<script>
/**
 * Documentado en http://lwp-l.com/s2379
 */
function isValidDate(day,month,year)
{
    var dteDate;
    month=month-1;
    dteDate=new Date(year,month,day);
    return ((day==dteDate.getDate()) && (month==dteDate.getMonth()) && (year==dteDate.getFullYear()));
}
 
/**
 * Funcion para validar una fecha
 * Tiene que recibir:
 *  La fecha en formato español dd/mm/yyyy
 * Devuelve:
 *  true o false
 */
function validate_fecha(fecha)
{
    var patron=new RegExp("^([0-9]{1,2})([/])([0-9]{1,2})([/])(19|20)+([0-9]{2})$");
 
    if(fecha.search(patron)==0)
    {
        var values=fecha.split("-");
        if(isValidDate(values[2],values[1],values[0]))
        {
            return true;
        }
    }
    return false;
}
 
function calcularDias()
{
    var fechaActual=document.getElementById("fechaActual").value;
    var fechaEnvio=document.getElementById("fechaEnvio").value;
    var resultado="";
    if(validate_fecha(fechaActual) && validate_fecha(fechaEnvio))
    {
        inicial=fechaActual.split("-");
        final=fechaEnvio.split("-");
        // obtenemos las fechas en milisegundos
        var dateStart=new Date(inicial[0],(inicial[1]-1),inicial[2]);
        var dateEnd=new Date(final[0],(final[1]-1),final[2]);
        if(dateStart<dateEnd)
        {
            // la diferencia entre las dos fechas, la dividimos entre 86400 segundos
            // que tiene un dia, y posteriormente entre 1000 ya que estamos
            // trabajando con milisegundos.
            var diasDif = dateEnd.getTime() - dateStart.getTime();
            resultado="Dias trancurridos: "+ (diasDif/86400000) +" ";
        }else{
            resultado="La fecha Actual es posterior a la fecha de envío";
        }
    }else{
        if(!validate_fecha(fechaActual))
            resultado="La fecha actual es incorrecta";
        if(!validate_fecha(fechaEnvio))
            resultado="La fecha de envío es incorrecta";
    }
    document.getElementById("resultado").innerHTML=resultado;
}
</script>

Y en el formulario ambas fechas son estas y el resultado es 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
<div class="form-group">
    <label for="fechaEnvio" class="col-sm-2 control-label">Fecha Envío</label>
    <div class="col-sm-10">
            <input type="date" class="form-control" id="fechaEnvio" name="fechaEnvio" placeholder="Fecha deEnvio" value="<?php echo $row['fechaEnvio']; ?>" >
    </div>
</div>
 
<div class="form-group">
    <label for="fechaActual" class="col-sm-2 control-label">Fecha Actual</label>
    <div class="col-sm-10">
            <input type="date" class="form-control" id="fechaActual" name="fechaActual" placeholder="Fecha Actual"  value=<?php
                // Obteniendo la fecha actual del sistema con PHP
                $fechaActual = date('d-m-Y');
                echo $fechaActual;?> >
    </div>
</div>
 
<div class="form-group">
    <label for="contador" class="col-sm-2 control-label">Contador</label>
    <div class="col-sm-10">
        <input type="button" value="Calcular dias" onclick="calcularDias();">
 
        <input type="number" class="form-control" id="resultado " name="resultado " placeholder="Contador" value="resultado">
            <div id="resultado"></div>
            </div>
</div>

Te agradecería mucho que por favor le echases un vistazo a este código
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
sin imagen de perfil
Val: 75
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Restar fecha de hoy con otra

Publicado por Monica (32 intervenciones) el 09/10/2019 12:24:51
Hola Joel,
He estado trabajando en este punto. Tengo un archivo que importa de excel a la base de datos y los muestra en una tabla al usuario. En el archivo de importación es donde debo poner esta resta de fechas para que el resultado me de en el campo contador. He conseguido que me haga la resta y me lo muestre en la página pero no en el campo contador. Mira he hecho esto en el archivo importar.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$x_fechaEnvio  = $sheet->getCell("F".$row)->getValue();
$x_fechaEnvio =  !empty($x_fechaEnvio) ? date('Y-m-d',PHPExcel_Shared_Date::ExcelToPHP($x_fechaEnvio)) : null;
$x_fechaRecep = $sheet->getCell("G".$row)->getValue();
$x_fechaRecep = !empty($x_fechaRecep) ? date('Y-m-d',PHPExcel_Shared_Date::ExcelToPHP($x_fechaRecep)) : null;
$x_fechaActual = $sheet->getCell("H".$row)->getValue();
$datetime1 = date_create($x_fechaActual);
$datetime2 = date_create($x_fechaEnvio);
$contador = date_diff($datetime1, $datetime2);
echo $contador->format('%R%a d&#237;as');
$x_contador = $sheet->getCell("I".$row)->getValue();
$x_contador = $x_fechaActual->diff($x_fechaEnvio);
 
$sql = "insert into contratospendientes (
fechaEnvio,
    fechaActual,
    fechaRecep, 
    contador, 
) value  (
CAST('$x_fechaEnvio' AS DATE),
    NOW(),
    CAST('$x_fechaRecep' AS DATE),
    CAST('$x_contador' AS('%R%a d&#237;as'),

Me puedes ayudar?
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 joel
Val: 2.370
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Restar fecha de hoy con otra

Publicado por joel (695 intervenciones) el 09/10/2019 18:22:06
Hola Monica, guardar la diferencia en la tabla, no es una buena idea, ya que mañana ese valor sera incorrecto, no?

si tienes la fecha en la base de datos, es sencillo devolver la diferencia de días en una consulta...
1
select DateDiff(NOW(), FechaEnvio) as Dias from myTable
Esta consulta te devolverá siempre la diferencia en días entre hoy y FechaEnvio.
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
sin imagen de perfil
Val: 75
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Restar fecha de hoy con otra

Publicado por Monica (32 intervenciones) el 09/10/2019 18:40:00
Joel, entonces me sugieres que esta consulta la ponga en el index en el campo "contador" para que traiga la diferencia al campo, en vez de hacer en el archivo que importa los datos.
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 joel
Val: 2.370
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Restar fecha de hoy con otra

Publicado por joel (695 intervenciones) el 09/10/2019 21:05:55
Si, si, mucho mejor calcularla cuando la necesitas que no guardarla en la base de datos.
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