note 125668 added to datetime.add
| From: | info at mobger dot de | Date: | Sat, 09 Jan 2021 22:57:06 +0000 |
| Subject: | note 125668 added to datetime.add | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-216077@lists.php.net to get a copy of this message | ||
Remark, that calculations on date are not defined as bijective operations. The Summertime is
integrated by mixing two concepts. You should test it beforehead.
Datetime will correct a date after each summation, if a date (29.2.2021 => 1.3.2021) or a
datetime (29.3.2020 2:30 am (Europe/Berlin) => 29.3.2020 3:30 or 29.3.2020 1:30)
Example
<?php
$expectEaster = date_create_from_format('Y-m-d H:i:s', '2020-04-12 12:00:00',
new DateTimeZone('Europe/Berlin'));
$interval = new DateInterval('PT20761M');
$expectEaster->sub($interval);
echo('recalc '.$expectEaster->format('Y-m-d H:i:s')."\n");
$expectEaster->add($interval);
echo('easter '.$expectEaster->format('Y-m-d H:i:s')."\n" );
$expectEaster = date_create_from_format('Y-m-d H:i:s', '2020-04-12 12:00:00',
new DateTimeZone('Europe/Berlin'));
$interval = new DateInterval('PT20760M');
$expectEaster->sub($interval);
echo('recalc '.$expectEaster->format('Y-m-d H:i:s')."\n");
$expectEaster->add($interval);
echo('easter '.$expectEaster->format('Y-m-d H:i:s')."\n");
$expectEaster = date_create_from_format('Y-m-d H:i:s', '2020-04-12 12:00:00',
new DateTimeZone('Europe/Berlin'));
$interval = new DateInterval('PT20701M');
$expectEaster->sub($interval);
echo('recalc '.$expectEaster->format('Y-m-d H:i:s')."\n");
$expectEaster->add($interval);
echo('easter '.$expectEaster->format('Y-m-d H:i:s')."\n");
$expectEaster = date_create_from_format('Y-m-d H:i:s', '2020-04-12 12:00:00',
new DateTimeZone('Europe/Berlin'));
$interval = new DateInterval('PT20700M');
$expectEaster->sub($interval);
echo('recalc '.$expectEaster->format('Y-m-d H:i:s')."\n");
$expectEaster->add($interval);
echo('easter '.$expectEaster->format('Y-m-d H:i:s')."\n");
// Result
// recalc 2020-03-29 00:59:00 // reduce the missing hour before you calcuclate the datetime
// easter 2020-04-12 11:00:00 // recalcultate the date and remove the missing hour
// recalc 2020-03-29 03:00:00 //because 2020-03-29 3:00:00 [it means 2020-03-29 2:00:00] does not
exist add 60 min)
// easter 2020-04-12 13:00:00
// recalc 2020-03-29 03:59:00 // -(12*60+(11+2)*1440+21*60) = -(20701 min) = = 29.3.2020 2:59(not
exist => no-equivalent add of one hour) => 29.3.2020 3:59
// easter 2020-04-12 13:00:00 // Recalc add 60 minutes, because the hour does not exist.)
// recalc 2020-03-29 03:00:00 // -(12*60+(11+2)*1440+21*60 min)= -(20700 min) = 29.3.2020 3:00
// easter 2020-04-12 12:00:00 // +(12*60+(11+2)*1440+21*60 min)= +(20700 min) = 29.3.2020
----
Server IP: 45.112.84.4
Probable Submitter: 195.138.250.34 (proxied: 2003:e4:970d:2c01:9000:be8f:38f4:ae0d)
----
Manual Page -- http://php.net/manual/en/datetime.add.php
Edit -- https://master.php.net/note/edit/125668
Del: integrated -- https://master.php.net/note/delete/125668/integrated
Del: useless -- https://master.php.net/note/delete/125668/useless
Del: bad code -- https://master.php.net/note/delete/125668/bad+code
Del: spam -- https://master.php.net/note/delete/125668/spam
Del: non-english -- https://master.php.net/note/delete/125668/non-english
Del: in docs -- https://master.php.net/note/delete/125668/in+docs
Del: other reasons-- https://master.php.net/note/delete/125668
Reject -- https://master.php.net/note/reject/125668
Search -- https://master.php.net/manage/user-notes.php