Временная метка DateTime не изменяется при смене часового пояса

#php #datetime #php-5.6

#php #datetime #php-5.6

Вопрос:

Хорошо, в принципе, я немного смущен тем, как работает временная метка в DateTime в PHP. Я хочу создать два метода, которые преобразуют местное время в UTC и наоборот.

В настоящее время у меня есть это:

 /**
 * @param IPSDateTime $utcDateTime The UTC datetime.
 * @param DateTimeZone $timezone The timezone to convert the UTC time to.
 * @return IPSDateTime New datetime object in local datetime.
 * @throws Exception when the UTC date is not in UTC format. (debugging purposes)
 */
public static function utcToLocal($utcDateTime, $timezone)
{
    if ($utcDateTime->getTimezone()->getName() !== "UTC") {
        throw new Exception("Date time is not UTC!");
    }
    $time = new DateTime($utcDateTime, new DateTimeZone("UTC"));
    $time->setTimezone($timezone);
    return $time;
}

/**
 * @param IPSDateTime $localDateTime A datetime configured with the the user's timezone
 * @return DateTime New datetime object in UTC format
 * @throws Exception When given datetime is already in UTC (for debugging purposes)
 */
public static function localToUtc($localDateTime)
{
    if ($localDateTime->getTimezone()->getName() === "UTC") {
        throw new Exception("Value is already UTC");
    }

    $time = new DateTime($localDateTime, $localDateTime->getTimezone());
    $time->setTimezone(new DateTimeZone("UTC"));
    return $time;
}
  

Когда я отлаживаю этот код, в последней строке return $time localToUtc(...) моего отладчика отображаются правильные преобразования:
Отладчик, показывающий правильное время

Однако, когда я оцениваю выражение

$localDateTime->getTimestamp() === $time->getTimestamp()

он вернет true.

Итак, я немного смущен, я просто хочу, чтобы временные метки менялись при смене часового пояса. Я думаю, может быть, мне нужно поработать, getOffset() но я хочу убедиться, что я делаю это правильно. Я бы также предпочел не использовать какие-либо трюки с форматом строки, потому что я чувствую, что это неправильный способ.

Комментарии:

1. Действительно ли оба вывода временных меток действительно совпадают друг с другом, даже если часовые пояса разные???

2. @UmairShahYousafzai Да. Они идентичны. Их печать показывает то же самое.

3. Это происходит потому, что временные метки всегда являются UTC. См. en.wikipedia.org/wiki/Unix_time и php.net/manual/en/datetime.gettimestamp.php