Open Gu3 opened 3 years ago
Hi ! I've got an use case who make an error inside the ArrayTranformer.
Imagine this Rule :
Rule {#11684 #timezone: "Europe/Paris" #startDate: DateTime {#9670 +"date": "2021-07-01 00:00:00.000000" +"timezone_type": 3 +"timezone": "Europe/Paris" } #endDate: DateTime {#9666 +"date": "2021-09-06 00:00:00.000000" +"timezone_type": 3 +"timezone": "Europe/Paris" } #isStartDateFromDtstart: false #freq: 3 #interval: 1 #isExplicitInterval: false #until: null #count: 1 #bySecond: null #byMinute: null #byHour: null #byDay: null #byMonthDay: null #byYearDay: null #byWeekNumber: null #byMonth: null #weekStart: "MO" #weekStartDefined: false #days: array:7 [▶] #bySetPosition: null #rDates: [] #exDates: [] }
The duration interval give us :
$start = $rule->getStartDate(); $end = $rule->getEndDate(); $durationInterval = $start->diff($end); // 2 months and 6 days ==> 67 days
the add method give us :
$end->add($durationInterval); // september 7th instead of september 6th
if we used modify instead of add :
$end->modify(sprintf("+ %s day" . ($durationInterval->days == 1 ? '' : 's'), $durationInterval->days)); // september 6th
For a full explanation : https://aiocollective.com/blog/php-datetime-difference-trap/
Is that correct for you too ? Cheer ! Vincent.
Hi ! I've got an use case who make an error inside the ArrayTranformer.
Imagine this Rule :
The duration interval give us :
the add method give us :
$end->add($durationInterval); // september 7th instead of september 6th
if we used modify instead of add :
$end->modify(sprintf("+ %s day" . ($durationInterval->days == 1 ? '' : 's'), $durationInterval->days)); // september 6th
For a full explanation : https://aiocollective.com/blog/php-datetime-difference-trap/
Is that correct for you too ? Cheer ! Vincent.