PHP MongoDate / DateTime ошибка или недоразумение

Что-то не так с функцией MongoDate?

Когда я преобразовываю объект DateTime в MongoDate, а затем пытаюсь преобразовать его обратно в DateTime, я получаю совершенно другое значение. Имейте в виду, что мы говорим о дате в пределах EPOCH.

Вот способ воспроизвести проблему.

$dateTime  = new DateTime( '2015-07-20 10:15:45', new DateTimeZone( 'Europe/London' ) );

$mongoDate = new MongoDate( $dateTime->getTimeStamp() );

echo $mongoDate->sec ."\n"; // 1437383745

echo date( 'Y-m-d H:i:s', $mongoDate->sec ) ."\n"; // 2015-07-20 11:15:45

$dateTime2 = $mongoDate->toDateTime();

echo $dateTime2->format('Y-m-d H:i:s') ."\n"; // 1969-12-15 10:41:40

Это нормальное поведение?

1

Решение

У вас есть проблема с часовым поясом. Когда вы создаете объект DateTime, вы создаете его в Europe/London часовой пояс. Но когда вы «конвертируете» секунды обратно в формат даты и времени, вы используете date() функция, которая использует часовой пояс по умолчанию, который, очевидно, отличается от Europe/London,

Создать объект DateTime с $mongoDate->sec а затем конвертировать часовой пояс.

$dt = new DateTime('@' . $mongoDate->sec);
$dt->setTimezone(new DateTimeZone('Europe/London'));
echo $dt->format('c');
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]