PHP Carbon Issue изменяет время на летнее время (DST) - PullRequest
2 голосов
/ 21 сентября 2019

У меня проблема с библиотекой Carbon на PHP, когда я изменяю день (сохранение дневного света) в часовом поясе Великобритании, я использую версию Carbon: 1.31.0, версию PHP: 5.6.11 на Laravel 5.5

это моя функция, конвертируемая в startOfHour:

    public function getStartHour($timestamp)
    {
        $carbonDate = Carbon::createFromTimestamp($timestamp, 'Europe/London');
        $startHour = $carbonDate->startOfHour()->timestamp;
        return $startHour;
    }

   // Case 1:
   // Sunday October 27, 2019 00:00:00 (am) GMT
   // Sunday October 27, 2019 01:00:00 (am) (Timezone + 1 , On daylight saving)
   $time = $this->getStartHour(1572134400); // 1572138000 (Issue here)
   //My expected: 1572134400

   // Case 2:
   // Sunday October 27, 2019 00:30:00 (am) GMT
   // Sunday October 27, 2019 01:30:00 (am) (Timezone + 1 , On daylight saving)
   $time = $this->getStartHour(1572136200); // 1572138000 (Issue here)
   //My expected: 1572134400

   // Case 3:
   // Sunday October 27, 2019 01:00:00 (am) UCT
   // Sunday October 27, 2019 01:00:00 (am) UK (Timezone + 0)
   $time = $this->getStartHour(1572138000); // 1572138000 - 01:00:00 (Ok)

   // Case 4:
   // Sunday October 27, 2019 01:30:00 (am) UTC
   // Sunday October 27, 2019 01:00:00 (am) (Timezone + 0)
   $time = $this->getStartHour(1572139800); // 1572138000 - 10:00:00 (Ok)

4, если они возвращают один и тот же результат (1572138000).Это не совсем так в реальном случае.

Но когда я использую библиотеку MomentJs, она конвертируется правильно, как и ожидалось. Вот мой код Js с Moment

  function getStartHour (timestamp) {
    const m = moment(timestamp * 1000).tz('Europe/London');
    startHour = m.clone().startOf('hour').unix()
    return startHour;
  }

Чем отличается библиотека 2 и как можноЯ исправляю код PHP и возвращаю тот же код JS.Большое спасибо.

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