DateTime :: createFromFormat с часовым поясом действительно меняет вывод - PullRequest
0 голосов
/ 08 мая 2019

Независимо от того, в каком часовом поясе я использую данные, я получаю один и тот же результат.

Я ожидал, что время (2-й аргумент) будет в формате UTC - оно не похоже.

Вв таком случае, какой толк в третьем аргументе - часовом поясе, если мы не получаем время в выбранном часовом поясе, но повторяем время, которое мы ввели?

Я вижу смещение (в скобках), но не понимаю,как это практически полезно.

Я ценю, если кто-то объяснит, что я не понимаю здесь правильно.

Когда я использую:

DateTime::createFromFormat("Y-m-d H:i:s", "2019-05-31 10:00:56", new DateTimeZone('America/Fortaleza'));

Я получаю это:

DateTime @1559307656 {#1978
  date: 2019-05-31 10:00:56.0 America/Fortaleza (-03:00),
}

Я ожидал получить:

DateTime @1559307656 {#1978
  date: 2019-05-31 07:00:56.0 America/Fortaleza (-03:00),
}

На самом деле, я не получаю никаких изменений, независимо от введенного часового пояса:


>>> DateTime::createFromFormat("Y-m-d H:i:s", "2019-05-31 10:00:56", new DateTimeZone('UTC'))
DateTime @1559296856 {#1979
  date: 2019-05-31 10:00:56.0 UTC (+00:00),
}

>>> DateTime::createFromFormat("Y-m-d H:i:s", "2019-05-31 10:00:56", new DateTimeZone('Europe/Moscow'))
DateTime @1559286056 {#1958
  date: 2019-05-31 10:00:56.0 Europe/Moscow (+03:00),
}

1 Ответ

1 голос
/ 08 мая 2019

Вы неправильно понимаете использование третьего параметра.Он используется, чтобы сообщить DateTime::createFromFormat, какой часовой пояс времени вы прошли, который также становится часовым поясом результата.Если ваше время ввода UTC, это подходящее значение для третьего параметра, и вы можете использовать DateTime::setTimeZone для установки часового пояса значения:

$date = DateTime::createFromFormat("Y-m-d H:i:s", "2019-05-31 10:00:56", new DateTimeZone('UTC'));
$date->setTimeZone(new DateTimeZone('America/Fortaleza'));
var_dump($date);

Вывод:

object(DateTime)#2 (3) {
  ["date"]=> string(26) "2019-05-31 07:00:56.000000"
  ["timezone_type"]=> int(3)
  ["timezone"]=> string(17) "America/Fortaleza" 
}

Демонстрация на 3v4l.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...