We have found a bug in the Frozendate::setToStringFormat() functionality. Sometimes the year gets incremented. For eaxample, if the provided date is 1958-12-31 and we modify its format with setToStringFormat(‘dd-MM-YYYY’), it will show on screen as 31-12-1959. This only happens when the date is December 31st. If we change the date to, for example, December 21st, then the year is shown properly.
The funny thing is that it’s nog a consistent bug. Sometimes the year does get incremented and sometimes it does not. We have been unable to find any sort of logical pattern to this. Below I have provided the code we used to study this issue.
$dates = [
[new \Cake\I18n\FrozenDate('1968-12-31'),'31-12-1968',''],
[new \Cake\I18n\FrozenDate('1969-12-31'),'31-12-1969',''],
[new \Cake\I18n\FrozenDate('1970-12-31'),'31-12-1970',''],
[new \Cake\I18n\FrozenDate('1971-12-31'),'31-12-1971',''],
[new \Cake\I18n\FrozenDate('1972-12-31'),'31-12-1972',''],
[new \Cake\I18n\FrozenDate('1973-12-31'),'31-12-1973',''],
[new \Cake\I18n\FrozenDate('1974-12-31'),'31-12-1974',''],
[new \Cake\I18n\FrozenDate('1975-12-31'),'31-12-1975',''],
[new \Cake\I18n\FrozenDate('1976-12-31'),'31-12-1976',''],
[new \Cake\I18n\FrozenDate('1977-12-31'),'31-12-1977',''],
[new \Cake\I18n\FrozenDate('1978-12-31'),'31-12-1978',''],
[new \Cake\I18n\FrozenDate('1979-12-31'),'31-12-1979',''],
[new \Cake\I18n\FrozenDate('1980-12-31'),'31-12-1980',''],
[new \Cake\I18n\FrozenDate('1981-12-31'),'31-12-1981',''],
[new \Cake\I18n\FrozenDate('1982-12-31'),'31-12-1982',''],
[new \Cake\I18n\FrozenDate('1983-12-31'),'31-12-1983',''],
[new \Cake\I18n\FrozenDate('1984-12-31'),'31-12-1984',''],
[new \Cake\I18n\FrozenDate('1985-12-31'),'31-12-1985',''],
[new \Cake\I18n\FrozenDate('1986-12-31'),'31-12-1986',''],
[new \Cake\I18n\FrozenDate('1987-12-31'),'31-12-1987',''],
[new \Cake\I18n\FrozenDate('1988-12-31'),'31-12-1988',''],
[new \Cake\I18n\FrozenDate('1989-12-31'),'31-12-1989',''],
[new \Cake\I18n\FrozenDate('1990-12-31'),'31-12-1990',''],
[new \Cake\I18n\FrozenDate('1991-12-31'),'31-12-1991',''],
[new \Cake\I18n\FrozenDate('1992-12-31'),'31-12-1992',''],
[new \Cake\I18n\FrozenDate('1993-12-31'),'31-12-1993',''],
[new \Cake\I18n\FrozenDate('1994-12-31'),'31-12-1994',''],
[new \Cake\I18n\FrozenDate('1995-12-31'),'31-12-1995',''],
[new \Cake\I18n\FrozenDate('1996-12-31'),'31-12-1996',''],
[new \Cake\I18n\FrozenDate('1997-12-31'),'31-12-1997',''],
[new \Cake\I18n\FrozenDate('1998-12-31'),'31-12-1998',''],
[new \Cake\I18n\FrozenDate('1999-12-31'),'31-12-1999',''],
[new \Cake\I18n\FrozenDate('2000-12-31'),'31-12-2000',''],
];
$dates2 = [];
foreach ($dates as $dateobj){
$dateobj[0]->setToStringFormat('dd-MM-YYYY');
$dates2[] = [$dateobj[0], $dateobj[1], $dateobj[0]->format('d-m-Y')];
}
debug($dates2);
Datums
<?php
foreach($dates2 as $dateobj){
echo '<li>';
$dateobj[0]->setToStringFormat('dd-MM-YYYY');
/*
* $dateobj[1] = expected date
* $dateobj[0] = date shown after setToStringFormat (sometimes increments year)
* $dateobj[0]->format() = date shown after format (shows expected date)
*/
echo '<span class="data">'.$dateobj[1].' | '.$dateobj[0].' | '.$dateobj[0]->format('d-m-Y').'</span>'; echo '</li>';
}
?>
</ul>