Как правильно задавать timestamp при отправке запроса на сторонний API?

Рейтинг: 0Ответов: 2Опубликовано: 05.08.2023

У меня возникли проблемы с пониманием работы даты и времени в PHP. Над своим вопросом не могу уже разобраться второй день. Прошу помочь разобраться. Есть API, куда я передаю:

методы Carbon/Laravel

'json' => [
                'dir' => 'ASC',
                'filter' => [
                    'delivering_date_from' => now()->format('Y-m-d'),
                    'delivering_date_to' => now()->addDays(7),
                    'status' => 'awaiting_registration '
                ],
                'limit' => 10,
                'offset' => 0,
                'with' => [
                    'analytics_data' => true,
                    'financial_data' => true,
                    'translit' => true
                ]
            ]

метод РНР

'json' => [
                'dir' => 'ASC',
                'filter' => [
                    'delivering_date_from' => date('Y-m-d'),
                    'delivering_date_to' => date('Y-m-d', strtotime(7)),
                    'status' => 'awaiting_registration '
                ],
                'limit' => 10,
                'offset' => 0,
                'with' => [
                    'analytics_data' => true,
                    'financial_data' => true,
                    'translit' => true
                ]
            ]

При этих двух вариантах я получаю ответ {"code":3, "message":"proto: (line 1:47): invalid google.protobuf.Timestamp value "2023-08-05"", "details":[]}

Если я использую метод date(), то я должен указать в каком формате передать + timestamp, который передавать необязательно или всё таки надо?

Ответы

▲ 1

Нашёл примерно такую ссылку: https://cloud.google.com/ruby/docs/reference/google-cloud-container-v1/latest/Google-Protobuf-Timestamp в которой сказано:

The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z

Вот такой формат и нужно делать. Если писать на чистом PHP, то это может выглядеть следующим образом:

$date = \DateTime::createFromFormat(
        "y-m-d H:i:s",
        "2020-01-01 00:00:00",
        new \DateTimeZone("UTC")
    )
    ->format("Y-m-d\TH:i:s\Z");

где вместо 2020-01-01 00:00:00 можно подставить тот же date('Y-m-d') и нули, если уточнения не требуются (или date('Y-m-d h:i:s'))

▲ 0

Дату нужно передать в таком формате

...
'delivering_date_from' => date('Y-m-d\TH:i:s\Z'); // 2023-08-05T00:00:00Z
'delivering_date_to'   => date('Y-m-d\TH:i:s\Z', strtotime('+7 days')); // 2023-08-12T00:00:00Z
...