2013-08-21 3 views
1

Я работаю над приложением, которое отправляет запрос на сторонний сервер лицензирования продукта, ждет ответа, а затем отправляет запрос на мой сервер через несколько секунд. Позже я сравниваю две записи на основе даты и времени их создания. Когда я смотрю на время, они кажутся примерно 6 часами (предположительно из-за различий в часовых поясах). Однако, когда я запускаю каждую функцию PHP strtotime(), результаты удаляются всего на несколько секунд. Вот пример:PHP-как работает strtotime()?

echo strtotime("2013-04-29T14:55:47.707Z"); 
echo '<br>'; 
echo strtotime("2013-04-29 08:56:10"); 

дисплеи, как:

1367247347 
1367247370 

который является лишь разницей 23 секунд, а не 6 часов.

Если я не предоставляю информацию о часовом поясе каждой строки даты, как они подходят так близко друг к другу?

(Имейте в виду, что я хотел бы, чтобы эти результаты, чтобы быть правильным, я просто не знаю, как я получаю их)

+7

цифры от 'StrToTime() '- [Unix timestamps] (http://en.wikipedia.org/wiki/Unix_time). Первая строка времени находится в часовом поясе «UTC» (обозначается буквой «Z» для «Zulu»). Вторая временная строка не имеет указанного часового пояса, поэтому использует то, что в настоящее время настроено для вашего PHP, у которого есть смещение -6 часов с UTC. – salathe

+0

Единственное, что я могу придумать, это то, что '.707Z' должен переводить на какой-то тип информации о часовом поясе. – Pitchinnate

+0

часовой пояс по умолчанию установлен в UTC, поэтому они вычисляются в пределах того же часового пояса. См. [Здесь] (http://php.net/manual/en/function.date-default-timezone-set.php), если вам нужно другое поведение – Orangepill

ответ

0

Вы действительно должны избегать использования strtotime, если вы абсолютно не должны. Когда у вас действительно есть полный формат даты, как и вы, вы должны использовать класс DateTime, встроенный в PHP.

Этот код должен указывать правильные отметки времени UNIX. (Вам не нужно включить часовой пояс по умолчанию в зависимости от конфигурации сервера Если вы установите его в вашей временной зоне..)

// You may be able to comment this out depending on your server configuration 
date_default_timezone_set('America/New_York'); 

$dateone = new DateTime('2013-04-29T14:55:47.707Z'); 
$datetwo = new DateTime('2013-04-29 08:56:10'); 

echo $dateone->format('U'); 
echo "<br/>"; 
echo $datetwo->format('U'); 

Выходы:

1367247347 
1367240170 
Смежные вопросы