PHP преобразовать строку в другой часовой пояс, когда день имеет 2 цифры - PullRequest
1 голос
/ 07 июля 2019

Я получаю дату в виде строки, используя webscraping.its в часовом поясе Берлина, и я хочу преобразовать ее в московское время.

я делаю это, как показано ниже:

$date_str ="7/4/2019 3:30";
  try {
      $date = new DateTime($date_str, new DateTimeZone('Europe/Berlin'));
      $date->setTimezone(new DateTimeZone('Europe/Moscow'));
      $date_in_moscow = $date->format('d/m/Y H:i');
  } catch (Exception $e) {
       echo "error";
  }

когда день в $ date_str имеет одну цифру, например, "7" (без нуля), все будет в порядке. Но когда день имеет 2 цифры, например, "17", вызывается блок catch. Я пытался с использованием ('J / N / Y H: I') в качестве формата, но результат был тот же. я не знаю почему ?! это из-за типа формата?

Ответы [ 2 ]

0 голосов
/ 07 июля 2019

Проблема, с которой вы столкнулись, связана с тем, что вы используете строку даты в формате d / m / Y , в то время как DateTime::__construct ожидает ее в m / d / Y формат.

Чтобы обойти эту проблему, необходимо изменить вызов функции следующим образом:

$date_str ="13/4/2019 13:30";
try {
    $date = DateTime::createFromFormat('d/m/Y H:i', $date_str, new DateTimeZone('Europe/Berlin'));
    $date->setTimezone(new DateTimeZone('Europe/Moscow'));
    echo $date_in_moscow = $date->format('d/m/Y H:i');
} catch (Exception $e) {
    echo "error";
}
0 голосов
/ 07 июля 2019

изменить формат $ date_str на "m / d / Y H: i", как "17.07.2009 3:30"

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