$timezoneObj = new DateTimeZone('Europe/London');
$GMT = new DateTimeZone('UTC');
//......
$dateObj = new DateTime($cellDataOfficeAttributes['date-value'], $GMT);
$dateObj->setTimeZone($timezoneObj);
There is a bug, second setting of $timezoneObj is not needed, because DateTime object was created with UTC timeZone, but second timeZone is hardcoded for London.
Simply run this code to understand what I mean:
date_default_timezone_set('Europe/Moscow');
$timezoneObj = new DateTimeZone('Europe/London');
$GMT = new DateTimeZone('UTC');
$dateObj = new DateTime('2012-04-01 00:00:00', $GMT);
echo $dateObj->format( 'Y-m-d H:i:s' ); // prints expected `2012-04-01 00:00:00` string
$dateObj->setTimeZone($timezoneObj);
echo $dateObj->format( 'Y-m-d H:i:s' ); // prints unexpected `2012-04-01 01:00:00` string, 1 hour difference
PHPExcel/Reader/OOCalc.php has this code:
There is a bug, second setting of $timezoneObj is not needed, because DateTime object was created with UTC timeZone, but second timeZone is hardcoded for London.
Simply run this code to understand what I mean: