Datum bug in PHP?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Gert Assen

Gert Assen

19/11/2013 10:16:47
Quote Anchor link
Hallo

Als ik de volgende code uitvoer in Zend voor bv 1-1-2012 krijg ik van 26 t/m 31 maart onverwachte resultaten. Hoe kan dat?

Code:
for($i = 1;$i <365;$i ++){
$this->_einddatum = clone $this->startdatum;
$this->_einddatum->addYear(1);
echo($this->startdatum->toString("yyyy-MM-d").' - '.$this->_einddatum->toString("yyyy-MM-d").' <br/>' );
$this->startdatum->addDay(1);
}

resultaat:
2012-01-1 - 2013-01-1
2012-01-2 - 2013-01-2
2012-01-3 - 2013-01-3
2012-01-4 - 2013-01-4
2012-01-5 - 2013-01-5
2012-01-6 - 2013-01-6
2012-01-7 - 2013-01-7
2012-01-8 - 2013-01-8
2012-01-9 - 2013-01-9
2012-01-10 - 2013-01-10
2012-01-11 - 2013-01-11
2012-01-12 - 2013-01-12
2012-01-13 - 2013-01-13
2012-01-14 - 2013-01-14
2012-01-15 - 2013-01-15
2012-01-16 - 2013-01-16
2012-01-17 - 2013-01-17
2012-01-18 - 2013-01-18
2012-01-19 - 2013-01-19
2012-01-20 - 2013-01-20
2012-01-21 - 2013-01-21
2012-01-22 - 2013-01-22
2012-01-23 - 2013-01-23
2012-01-24 - 2013-01-24
2012-01-25 - 2013-01-25
2012-01-26 - 2013-01-26
2012-01-27 - 2013-01-27
2012-01-28 - 2013-01-28
2012-01-29 - 2013-01-29
2012-01-30 - 2013-01-30
2012-01-31 - 2013-01-31
2012-02-1 - 2013-02-1
2012-02-2 - 2013-02-2
2012-02-3 - 2013-02-3
2012-02-4 - 2013-02-4
2012-02-5 - 2013-02-5
2012-02-6 - 2013-02-6
2012-02-7 - 2013-02-7
2012-02-8 - 2013-02-8
2012-02-9 - 2013-02-9
2012-02-10 - 2013-02-10
2012-02-11 - 2013-02-11
2012-02-12 - 2013-02-12
2012-02-13 - 2013-02-13
2012-02-14 - 2013-02-14
2012-02-15 - 2013-02-15
2012-02-16 - 2013-02-16
2012-02-17 - 2013-02-17
2012-02-18 - 2013-02-18
2012-02-19 - 2013-02-19
2012-02-20 - 2013-02-20
2012-02-21 - 2013-02-21
2012-02-22 - 2013-02-22
2012-02-23 - 2013-02-23
2012-02-24 - 2013-02-24
2012-02-25 - 2013-02-25
2012-02-26 - 2013-02-26
2012-02-27 - 2013-02-27
2012-02-28 - 2013-02-28
2012-02-29 - 2013-03-1
2012-03-1 - 2013-03-1
2012-03-2 - 2013-03-2
2012-03-3 - 2013-03-3
2012-03-4 - 2013-03-4
2012-03-5 - 2013-03-5
2012-03-6 - 2013-03-6
2012-03-7 - 2013-03-7
2012-03-8 - 2013-03-8
2012-03-9 - 2013-03-9
2012-03-10 - 2013-03-10
2012-03-11 - 2013-03-11
2012-03-12 - 2013-03-12
2012-03-13 - 2013-03-13
2012-03-14 - 2013-03-14
2012-03-15 - 2013-03-15
2012-03-16 - 2013-03-16
2012-03-17 - 2013-03-17
2012-03-18 - 2013-03-18
2012-03-19 - 2013-03-19
2012-03-20 - 2013-03-20
2012-03-21 - 2013-03-21
2012-03-22 - 2013-03-22
2012-03-23 - 2013-03-23
2012-03-24 - 2013-03-24
2012-03-25 - 2013-03-25
2012-03-26 - 2013-03-25
2012-03-27 - 2013-03-26
2012-03-28 - 2013-03-27
2012-03-29 - 2013-03-28
2012-03-30 - 2013-03-29
2012-03-31 - 2013-03-30
2012-04-1 - 2013-04-1
2012-04-2 - 2013-04-2
2012-04-3 - 2013-04-3
2012-04-4 - 2013-04-4
2012-04-5 - 2013-04-5
2012-04-6 - 2013-04-6
2012-04-7 - 2013-04-7
2012-04-8 - 2013-04-8
2012-04-9 - 2013-04-9
2012-04-10 - 2013-04-10
2012-04-11 - 2013-04-11
2012-04-12 - 2013-04-12
2012-04-13 - 2013-04-13
2012-04-14 - 2013-04-14
2012-04-15 - 2013-04-15
2012-04-16 - 2013-04-16
2012-04-17 - 2013-04-17
2012-04-18 - 2013-04-18
2012-04-19 - 2013-04-19
2012-04-20 - 2013-04-20
2012-04-21 - 2013-04-21
2012-04-22 - 2013-04-22
2012-04-23 - 2013-04-23
2012-04-24 - 2013-04-24
2012-04-25 - 2013-04-25
2012-04-26 - 2013-04-26
2012-04-27 - 2013-04-27
2012-04-28 - 2013-04-28
2012-04-29 - 2013-04-29
2012-04-30 - 2013-04-30
2012-05-1 - 2013-05-1
2012-05-2 - 2013-05-2
2012-05-3 - 2013-05-3
2012-05-4 - 2013-05-4
2012-05-5 - 2013-05-5
2012-05-6 - 2013-05-6
2012-05-7 - 2013-05-7
2012-05-8 - 2013-05-8
2012-05-9 - 2013-05-9
2012-05-10 - 2013-05-10
2012-05-11 - 2013-05-11
2012-05-12 - 2013-05-12
2012-05-13 - 2013-05-13
2012-05-14 - 2013-05-14
2012-05-15 - 2013-05-15
2012-05-16 - 2013-05-16
2012-05-17 - 2013-05-17
2012-05-18 - 2013-05-18
2012-05-19 - 2013-05-19
2012-05-20 - 2013-05-20
2012-05-21 - 2013-05-21
2012-05-22 - 2013-05-22
2012-05-23 - 2013-05-23
2012-05-24 - 2013-05-24
2012-05-25 - 2013-05-25
2012-05-26 - 2013-05-26
2012-05-27 - 2013-05-27
2012-05-28 - 2013-05-28
2012-05-29 - 2013-05-29
2012-05-30 - 2013-05-30
2012-05-31 - 2013-05-31
2012-06-1 - 2013-06-1
2012-06-2 - 2013-06-2
2012-06-3 - 2013-06-3
2012-06-4 - 2013-06-4
2012-06-5 - 2013-06-5
2012-06-6 - 2013-06-6
2012-06-7 - 2013-06-7
2012-06-8 - 2013-06-8
2012-06-9 - 2013-06-9
2012-06-10 - 2013-06-10
2012-06-11 - 2013-06-11
2012-06-12 - 2013-06-12
2012-06-13 - 2013-06-13
2012-06-14 - 2013-06-14
2012-06-15 - 2013-06-15
2012-06-16 - 2013-06-16
2012-06-17 - 2013-06-17
2012-06-18 - 2013-06-18
2012-06-19 - 2013-06-19
2012-06-20 - 2013-06-20
2012-06-21 - 2013-06-21
2012-06-22 - 2013-06-22
2012-06-23 - 2013-06-23
2012-06-24 - 2013-06-24
2012-06-25 - 2013-06-25
2012-06-26 - 2013-06-26
2012-06-27 - 2013-06-27
2012-06-28 - 2013-06-28
2012-06-29 - 2013-06-29
2012-06-30 - 2013-06-30
2012-07-1 - 2013-07-1
2012-07-2 - 2013-07-2
2012-07-3 - 2013-07-3
2012-07-4 - 2013-07-4
2012-07-5 - 2013-07-5
2012-07-6 - 2013-07-6
2012-07-7 - 2013-07-7
2012-07-8 - 2013-07-8
2012-07-9 - 2013-07-9
2012-07-10 - 2013-07-10
2012-07-11 - 2013-07-11
2012-07-12 - 2013-07-12
2012-07-13 - 2013-07-13
2012-07-14 - 2013-07-14
2012-07-15 - 2013-07-15
2012-07-16 - 2013-07-16
2012-07-17 - 2013-07-17
2012-07-18 - 2013-07-18
2012-07-19 - 2013-07-19
2012-07-20 - 2013-07-20
2012-07-21 - 2013-07-21
2012-07-22 - 2013-07-22
2012-07-23 - 2013-07-23
2012-07-24 - 2013-07-24
2012-07-25 - 2013-07-25
2012-07-26 - 2013-07-26
2012-07-27 - 2013-07-27
2012-07-28 - 2013-07-28
2012-07-29 - 2013-07-29
2012-07-30 - 2013-07-30
2012-07-31 - 2013-07-31
2012-08-1 - 2013-08-1
2012-08-2 - 2013-08-2
2012-08-3 - 2013-08-3
2012-08-4 - 2013-08-4
2012-08-5 - 2013-08-5
2012-08-6 - 2013-08-6
2012-08-7 - 2013-08-7
2012-08-8 - 2013-08-8
2012-08-9 - 2013-08-9
2012-08-10 - 2013-08-10
2012-08-11 - 2013-08-11
2012-08-12 - 2013-08-12
2012-08-13 - 2013-08-13
2012-08-14 - 2013-08-14
2012-08-15 - 2013-08-15
2012-08-16 - 2013-08-16
2012-08-17 - 2013-08-17
2012-08-18 - 2013-08-18
2012-08-19 - 2013-08-19
2012-08-20 - 2013-08-20
2012-08-21 - 2013-08-21
2012-08-22 - 2013-08-22
2012-08-23 - 2013-08-23
2012-08-24 - 2013-08-24
2012-08-25 - 2013-08-25
2012-08-26 - 2013-08-26
2012-08-27 - 2013-08-27
2012-08-28 - 2013-08-28
2012-08-29 - 2013-08-29
2012-08-30 - 2013-08-30
2012-08-31 - 2013-08-31
2012-09-1 - 2013-09-1
2012-09-2 - 2013-09-2
2012-09-3 - 2013-09-3
2012-09-4 - 2013-09-4
2012-09-5 - 2013-09-5
2012-09-6 - 2013-09-6
2012-09-7 - 2013-09-7
2012-09-8 - 2013-09-8
2012-09-9 - 2013-09-9
2012-09-10 - 2013-09-10
2012-09-11 - 2013-09-11
2012-09-12 - 2013-09-12
2012-09-13 - 2013-09-13
2012-09-14 - 2013-09-14
2012-09-15 - 2013-09-15
2012-09-16 - 2013-09-16
2012-09-17 - 2013-09-17
2012-09-18 - 2013-09-18
2012-09-19 - 2013-09-19
2012-09-20 - 2013-09-20
2012-09-21 - 2013-09-21
2012-09-22 - 2013-09-22
2012-09-23 - 2013-09-23
2012-09-24 - 2013-09-24
2012-09-25 - 2013-09-25
2012-09-26 - 2013-09-26
2012-09-27 - 2013-09-27
2012-09-28 - 2013-09-28
2012-09-29 - 2013-09-29
2012-09-30 - 2013-09-30
2012-10-1 - 2013-10-1
2012-10-2 - 2013-10-2
2012-10-3 - 2013-10-3
2012-10-4 - 2013-10-4
2012-10-5 - 2013-10-5
2012-10-6 - 2013-10-6
2012-10-7 - 2013-10-7
2012-10-8 - 2013-10-8
2012-10-9 - 2013-10-9
2012-10-10 - 2013-10-10
2012-10-11 - 2013-10-11
2012-10-12 - 2013-10-12
2012-10-13 - 2013-10-13
2012-10-14 - 2013-10-14
2012-10-15 - 2013-10-15
2012-10-16 - 2013-10-16
2012-10-17 - 2013-10-17
2012-10-18 - 2013-10-18
2012-10-19 - 2013-10-19
2012-10-20 - 2013-10-20
2012-10-21 - 2013-10-21
2012-10-22 - 2013-10-22
2012-10-23 - 2013-10-23
2012-10-24 - 2013-10-24
2012-10-25 - 2013-10-25
2012-10-26 - 2013-10-26
2012-10-27 - 2013-10-27
2012-10-28 - 2013-10-27
2012-10-29 - 2013-10-29
2012-10-30 - 2013-10-30
2012-10-31 - 2013-10-31
2012-11-1 - 2013-11-1
2012-11-2 - 2013-11-2
2012-11-3 - 2013-11-3
2012-11-4 - 2013-11-4
2012-11-5 - 2013-11-5
2012-11-6 - 2013-11-6
2012-11-7 - 2013-11-7
2012-11-8 - 2013-11-8
2012-11-9 - 2013-11-9
2012-11-10 - 2013-11-10
2012-11-11 - 2013-11-11
2012-11-12 - 2013-11-12
2012-11-13 - 2013-11-13
2012-11-14 - 2013-11-14
2012-11-15 - 2013-11-15
2012-11-16 - 2013-11-16
2012-11-17 - 2013-11-17
2012-11-18 - 2013-11-18
2012-11-19 - 2013-11-19
2012-11-20 - 2013-11-20
2012-11-21 - 2013-11-21
2012-11-22 - 2013-11-22
2012-11-23 - 2013-11-23
2012-11-24 - 2013-11-24
2012-11-25 - 2013-11-25
2012-11-26 - 2013-11-26
2012-11-27 - 2013-11-27
2012-11-28 - 2013-11-28
2012-11-29 - 2013-11-29
2012-11-30 - 2013-11-30
2012-12-1 - 2013-12-1
2012-12-2 - 2013-12-2
2012-12-3 - 2013-12-3
2012-12-4 - 2013-12-4
2012-12-5 - 2013-12-5
2012-12-6 - 2013-12-6
2012-12-7 - 2013-12-7
2012-12-8 - 2013-12-8
2012-12-9 - 2013-12-9
2012-12-10 - 2013-12-10
2012-12-11 - 2013-12-11
2012-12-12 - 2013-12-12
2012-12-13 - 2013-12-13
2012-12-14 - 2013-12-14
2012-12-15 - 2013-12-15
2012-12-16 - 2013-12-16
2012-12-17 - 2013-12-17
2012-12-18 - 2013-12-18
2012-12-19 - 2013-12-19
2012-12-20 - 2013-12-20
2012-12-21 - 2013-12-21
2012-12-22 - 2013-12-22
2012-12-23 - 2013-12-23
2012-12-24 - 2013-12-24
2012-12-25 - 2013-12-25
2012-12-26 - 2013-12-26
2012-12-27 - 2013-12-27
2012-12-28 - 2013-12-28
2012-12-29 - 2013-12-29
 
PHP hulp

PHP hulp

24/11/2024 11:51:38
 
Dos Moonen

Dos Moonen

19/11/2013 10:30:47
Quote Anchor link
Ik vermoed zomaar dat het iets met zomertijd te maken heeft: http://www.timeanddate.com/time/dst/2012a.html
Wat is het resultaat van date_default_timezone_get()?

Berekeningen met datum & tijd zijn moeilijk vanwege dingen zoals zomertijd, schrikkeldag, schrikkelseconden en vast nog andere dingen waar ik niet van op de hoogte ben.
Gewijzigd op 19/11/2013 10:46:19 door Dos Moonen
 
Gert Assen

Gert Assen

19/11/2013 10:34:17
Quote Anchor link
Kleine aanvulling: De volgende code laat zien dat er in de betreffende 5 dagen een uur minder is??
$this->startdatum->addHour(6);
for($i = 1;$i <365;$i ++){
$this->_einddatum = clone $this->startdatum;
$this->_einddatum->addYear(1);
echo($this->startdatum->toString("yyyy-MM-d HH-mm").' - '.$this->_einddatum->toString("yyyy-MM-d HH-mm").' <br/>' );
$this->startdatum->addDay(1);
}
geeft het volgende resultaat: (alleen rond 26 maart getoond en 27 oktober.)
Wintertijd probleem???

2012-03-23 06-00 - 2013-03-23 06-00
2012-03-24 06-00 - 2013-03-24 06-00
2012-03-25 06-00 - 2013-03-25 05-00
2012-03-26 06-00 - 2013-03-26 05-00
2012-03-27 06-00 - 2013-03-27 05-00
2012-03-28 06-00 - 2013-03-28 05-00
2012-03-29 06-00 - 2013-03-29 05-00
2012-03-30 06-00 - 2013-03-30 05-00
2012-03-31 06-00 - 2013-03-31 06-00
2012-04-1 06-00 - 2013-04-1 06-00
2012-04-2 06-00 - 2013-04-2 06-00
2012-04-3 06-00 - 2013-04-3 06-00
2012-04-4 06-00 - 2013-04-4 06-00
...
2012-10-25 06-00 - 2013-10-25 06-00
2012-10-26 06-00 - 2013-10-26 06-00
2012-10-27 06-00 - 2013-10-27 05-00
2012-10-28 06-00 - 2013-10-28 06-00
2012-10-29 06-00 - 2013-10-29 06-00

Toevoeging op 19/11/2013 10:36:14:

Is denk ik inderdaad een zomertijd probleem, maar waarom 6 dagen?
Gewijzigd op 19/11/2013 10:37:00 door Gert Assen
 
Kris Peeters

Kris Peeters

19/11/2013 10:36:34
Quote Anchor link
Dos Moonen op 19/11/2013 10:30:47:
dingen zoals zomertijd, schrikkeldag, schrikkelseconden en was nog andere dingen waar ik niet van op de hoogte ben.


In het jaar 8228 zal er een 30 februari zijn :)


------

Mijn code heeft dat probleem niet
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$start
= new Datetime('2012-01-01 00:06:00');
for($i = 1;$i <365;$i ++) {
  $stop = clone $start;
  $stop->modify('+1 YEAR');
  echo $start->format('Y-m-d H:i:s') .' - '. $stop->format('Y-m-d H:i:s') .'<br>';
  $start->modify('+1 DAY');
}

?>
Gewijzigd op 19/11/2013 11:08:32 door Kris Peeters
 
Erwin H

Erwin H

19/11/2013 11:40:48
Quote Anchor link
Het is wel toevallig dat de zomertijd in 2012 op 25 maart in ging en in 2013 op 31 maart.....

Blijkbaar is dat dus inderdaad waar het misgaat. Blijkbaar berekent Zend het verschil in dagen op basis van de verstreken uren en dan krijg je dit soort rare dingen. Zoals eerder al gemeld, datum berekeningen zijn complexe zaken met veel valkuilen.
 
Kris Peeters

Kris Peeters

19/11/2013 11:42:51
Quote Anchor link
Met de Datetime class kom ik zo goed als nooit dingen tegen die ik vreemd vind of niet verwacht.
zie vorige post
 
Gert Assen

Gert Assen

19/11/2013 12:24:51
Quote Anchor link
Met de extra 6 uur is mijn probleem wel opgelost, het ging mij om de juiste dag. Ik zal in het gevolg Datetime class gebruiken.

Blijft toch raar....
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.