Código de PHP - Cálculos correctos con fechas

Imágen de perfil
Val: 55
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Cálculos correctos con fechasgráfica de visualizaciones


PHP

estrellaestrellaestrellaestrellaestrella(2)
Publicado el 3 de Noviembre del 2015 por Fernando
4.093 visualizaciones desde el 3 de Noviembre del 2015
Ejemplos de cálculos con fechas en PHP y el efecto de los cambios de hora (DST) que en ellos tienen.
La salida se puede comprobar aquí: http://lab.fawno.com/code/dates.php
Para las preguntas y respuestas el hilo del foro

El artículo de mi blog: http://lab.fawno.com/2015/11/03/calculos-con-fechas-en-php/

3.0
estrellaestrellaestrellaestrellaestrella(2)

Publicado el 3 de Noviembre del 2015gráfica de visualizaciones de la versión: 3.0
4.094 visualizaciones desde el 3 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

Añado etiquetas pre para la correcta visualización de los resultados. Con la etiqueta pre los saltos de línea (\n) y los tabuladores (\t) se visualizan correctamente, además el navegador utilizará una tipografía monoespacio, lo que facilita la visualización de los resultados al respetar la alineación que he querido mantener.
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
<pre>
<?php
ini_set('date.timezone', 'Europe/Madrid');
 
define('HT',	"\x09");	// \x09	\t	Horizontal Tab
define('LF',	"\x0A");	// \x0A	\n	Line feed
 
// Calculamos el inicio del DST: último domingo de marzo (2015-03-29 00:00:00 para 2015).
$date10 = strtotime('last sunday of march');
echo strftime('$date10 = strtotime("last sunday of march");   => %Y-%m-%d %H:%M:%S', $date10), LF;
// Añadimos un día a $date10 de la manera correcta       (2015-03-30 00:00:00 para 2015).
$date11 = strtotime('+1day', $date10);
echo strftime('$date11 = strtotime("+1day", $date10);         => %Y-%m-%d %H:%M:%S', $date11), LF;
// Añadimos un día a $date10 de la manera incorrecta     (2015-03-30 01:00:00 para 2015).
$date12 = $date10 + 86400;
echo strftime('$date12 = $date10 + 86400;                     => %Y-%m-%d %H:%M:%S', $date12), LF;
 
echo LF;
 
// Calculamos el final del DST: último domingo de octubre (2015-10-25 00:00:00 para 2015).
$date20 = strtotime('last sunday of october');
echo strftime('$date20 = strtotime("last sunday of october"); => %Y-%m-%d %H:%M:%S', $date20), LF;
// Añadimos un día a $date20 de la manera correcta        (2015-10-26 00:00:00 para 2015).
$date21 = strtotime('+1day', $date20);
echo strftime('$date21 = strtotime("+1day", $date20);         => %Y-%m-%d %H:%M:%S', $date21), LF;
// Añadimos un día a $date20 de la manera incorrecta      (2015-10-25 23:00:00 para 2015).
$date22 = $date20 + 86400;
echo strftime('$date22 = $date20 + 86400;                     => %Y-%m-%d %H:%M:%S', $date22), LF;
 
echo LF;
 
// Calculamos la diferencia entre fechas de manera incorrecta, nos dará 82800 segundos (23 horas) para el inicio del DST.
$date_diff12 = $date11 - $date10;
echo '$date_diff12 = $date11 - $date10;                                                                                 => ', $date_diff12, ' segundos = ' , $date_diff12 / 3600, ' horas', LF;
// Calculamos la diferencia entre fechas de manera correcta, nos dará un día exacto.
$date_diff11 = date_diff(new DateTime(date('Y-m-d H:i:s', $date10)), new DateTime(date('Y-m-d H:i:s', $date11)))->format('%R %y años, %m meses, %d días, %h horas, %i minutos, %s segundos');
echo '$date_diff11 = date_diff(new DateTime(date("Y-m-d H:i:s", $date10)), new DateTime(date("Y-m-d H:i:s", $date11))); => ', $date_diff11, LF;
 
echo LF;
 
// Calculamos la diferencia entre fechas de manera incorrecta, nos dará 90000 segundos (25 horas) para el final del DST.
$date_diff22 = $date21 - $date20;
echo '$date_diff22 = $date21 - $date20;                                                                                 => ', $date_diff22, ' segundos = ' , $date_diff22 / 3600, ' horas', LF;
// Calculamos la diferencia entre fechas de manera correcta, nos dará un día exacto.
$date_diff21 = date_diff(new DateTime(date('Y-m-d H:i:s', $date20)), new DateTime(date('Y-m-d H:i:s', $date21)))->format('%R %y años, %m meses, %d días, %h horas, %i minutos, %s segundos');
echo '$date_diff21 = date_diff(new DateTime(date("Y-m-d H:i:s", $date20)), new DateTime(date("Y-m-d H:i:s", $date21))); => ', $date_diff21, LF;
?>
</pre>



Comentarios sobre la versión: 3.0 (2)

Imágen de perfil
4 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
Muy bueno Fernando!!!

Este código es mejor que el que yo publique!!!

Nota: El que lo quiera visualizar en un navegador, cambiar esta linea:
define('LF', "\x0A");
por esta:
define('LF', "<br>");
Responder
5 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
Excelente


Yo estoy relizando un proyecto y en una parte tengo que hacer que el sistema pueda reservar horarios para ser usado por cierto tiempo el control de una planta

esta parte tiene:
- fecha inicial
-fecha final
-hora inicial
-hora final

lo que pasa es que no he podido hacer que cuando me añada estos datos me diga que ya estan ocupadas esas horas o ese tiempo
Responder

Comentar la versión: 3.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s3329