note 123223 added to datetime.add

From: Date: Thu, 11 Oct 2018 16:56:37 +0000
Subject: note 123223 added to datetime.add
Groups: php.notes 
Request: Send a blank email to php-notes+get-209426@lists.php.net to get a copy of this message
If you use fraction of seconds, you may have surprises. It only occurs when the sum of the floating point parts results in exactly 1 second (0.5 + 0.5 ou 0.3 + 0.7, for example). See these cases at intervals slightly bigger than 1 second: <?php $objDataHora = date_create("2017-12-31T23:59:59.300"); $objIntervalo = new DateInterval("PT0S"); $objIntervalo->f = 0.600; $objDataHora = date_add($objDataHora, $objIntervalo); $strDataHora = date_format($objDataHora, "Y-m-d\TH:i:s.v"); ?> $strDataHora is correct: "2017-12-31T23:59:59.900" <?php $objDataHora = date_create("2017-12-31T23:59:59.300"); $objIntervalo = new DateInterval("PT0S"); $objIntervalo->f = 0.800; $objDataHora = date_add($objDataHora, $objIntervalo); $strDataHora = date_format($objDataHora, "Y-m-d\TH:i:s.v"); ?> $strDataHora is correct: "2018-01-01T00:00:00.100" But... <?php $objDataHora = date_create("2017-12-31T23:59:59.300"); $objIntervalo = new DateInterval("PT0S"); $objIntervalo->f = 0.700; $objDataHora = date_add($objDataHora, $objIntervalo); $strDataHora = date_format($objDataHora, "Y-m-d\TH:i:s.v"); ?> $strDataHora has "2017-12-31T23:59:59.1000" To resolve, add 1 second to the interval and f property must be negative (-1.0 plus original value): <?php $objDataHora = date_create("2017-12-31T23:59:59.300"); $objIntervalo = new DateInterval("PT1S"); $objIntervalo->f = -0.300; // = -1.0 + 0.700 $objDataHora = date_add($objDataHora, $objIntervalo); $strDataHora = date_format($objDataHora, "Y-m-d\TH:i:s.v"); ?> $strDataHora is correct: "2018-01-01T00:00:00.000" ---- Server IP: 212.199.163.163 Probable Submitter: 161.24.99.179 ---- Manual Page -- http://php.net/manual/en/datetime.add.php Edit -- https://master.php.net/note/edit/123223 Del: integrated -- https://master.php.net/note/delete/123223/integrated Del: useless -- https://master.php.net/note/delete/123223/useless Del: bad code -- https://master.php.net/note/delete/123223/bad+code Del: spam -- https://master.php.net/note/delete/123223/spam Del: non-english -- https://master.php.net/note/delete/123223/non-english Del: in docs -- https://master.php.net/note/delete/123223/in+docs Del: other reasons-- https://master.php.net/note/delete/123223 Reject -- https://master.php.net/note/reject/123223 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#209426) next »