note 123223 added to datetime.add
| From: | BinhoRbSoft@php.net | 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