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

Imágen de perfil

Cálculos correctos con fechasgráfica de visualizaciones


PHP

estrellaestrellaestrellaestrellaestrella(2)
Actualizado el 05 de Noviembre del 2015 por Fernando (Creado el 03 de Noviembre del 2015)
1.464 visualizaciones desde el 03 de Noviembre del 2015. Una media de 28 por semana
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)

Actualizado el 05 de Noviembre del 2015 (Creado el 03 de Noviembre del 2015)gráfica de visualizaciones de la versión: 3.0
1.465 visualizaciones desde el 03 de Noviembre del 2015. Una media de 28 por semana
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
xve
04 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
Johan
05 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

http://lwp-l.com/s3329