<?php
function shift_datetimeobject($begin1, $end1, $begin2) {
$dt_begin1 = new DateTime($begin1);
$dt_end1 = new DateTime($end1);
$span = $dt_begin1->diff($dt_end1);
$dt_return = new DateTime($begin2);
return array($dt_return->add($span), $span);
}
function shift_timestamp($begin1, $end1, $begin2) {
$dt_begin1 = new DateTime($begin1);
$st_begin1 = $dt_begin1->getTimestamp();
$dt_end1 = new DateTime($end1);
$st_end1 = $dt_end1->getTimestamp();
$span = $st_end1 - $st_begin1;
$dt_begin2 = new DateTime($begin2);
$st_begin2 = $dt_begin2->getTimestamp();
$st_end2 = $st_begin2 + $span;
$dt_end2 = new DateTime();
return $dt_end2->setTimestamp($st_end2);
}
$params = array(
array('2012-05-07', '2012-06-01', '2012-05-21'),
array('2012-06-11', '2012-07-13', '2012-06-18'),
array('2012-06-25', '2012-07-27', '2012-07-02'),
array('2012-07-09', '2012-07-27', '2012-07-16'),
);
foreach ($params as $p) {
$erg_object = shift_datetimeobject($p[0], $p[1], $p[2]);
$erg_stamp = shift_timestamp($p[0], $p[1], $p[2]);
printf("Params: %s, %s, %s\n", $p[0], $p[1], $p[2]);
printf('$erg_stamp = %s' . "\n", $erg_stamp->format('Y-m-d'));
printf('$erg_object[0] = %s' . "\n", $erg_object[0]->format('Y-m-d'));
printf("span (object) = %s\n", $erg_object[1]->format('%a days %H:%I:%S'));
if ($erg_object[0] == $erg_stamp) {
echo "OK";
} else {
echo "WRONG!";
}
echo "\n\n";
}
- Output for 7.0.0 - 7.0.20, 7.1.0 - 7.1.25, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
- Params: 2012-05-07, 2012-06-01, 2012-05-21
$erg_stamp = 2012-06-15
$erg_object[0] = 2012-06-15
span (object) = 25 days 00:00:00
OK
Params: 2012-06-11, 2012-07-13, 2012-06-18
$erg_stamp = 2012-07-20
$erg_object[0] = 2012-07-20
span (object) = 32 days 00:00:00
OK
Params: 2012-06-25, 2012-07-27, 2012-07-02
$erg_stamp = 2012-08-03
$erg_object[0] = 2012-08-04
span (object) = 32 days 00:00:00
WRONG!
Params: 2012-07-09, 2012-07-27, 2012-07-16
$erg_stamp = 2012-08-03
$erg_object[0] = 2012-08-03
span (object) = 18 days 00:00:00
OK
- Output for 8.3.5
- Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Params: 2012-05-07, 2012-06-01, 2012-05-21
$erg_stamp = 2012-06-15
$erg_object[0] = 2012-06-15
span (object) = 25 days 00:00:00
OK
Params: 2012-06-11, 2012-07-13, 2012-06-18
$erg_stamp = 2012-07-20
$erg_object[0] = 2012-07-20
span (object) = 32 days 00:00:00
OK
Params: 2012-06-25, 2012-07-27, 2012-07-02
$erg_stamp = 2012-08-03
$erg_object[0] = 2012-08-04
span (object) = 32 days 00:00:00
WRONG!
Params: 2012-07-09, 2012-07-27, 2012-07-16
$erg_stamp = 2012-08-03
$erg_object[0] = 2012-08-03
span (object) = 18 days 00:00:00
OK
preferences:
148.49 ms | 403 KiB | 188 Q