php strtotime () выдает другой результат в окне Mac Linux? - PullRequest
1 голос
/ 13 сентября 2011
$today   = date("Y-m-d H:i");
$endtime = date("2011-09-14 00:00");
$second  = abs(time() - strtotime($endtime, strtotime($today, 0)));

echo $second;

Я хочу найти второе с будущей даты - сегодняшнюю дату, но результат будет разным на всех платформах, где:

  • mac: 21343,
  • ubuntu:68172 и
  • окно: 50175.

После преобразования секунды в часы: минуты: секунды, разница составляет около 10-15 часов.Кто-нибудь знает другой метод, который работает как strtotime?

Ответы [ 4 ]

3 голосов
/ 13 сентября 2011

Вы делаете это довольно сложно.date("2011-09-14 00:00") нонсенс, просто "2011-09-14 00:00" сделает то же самое.strtotime($today, 0) тоже кажется странным.Только это должно сработать:

$second = abs(time() - strtotime('2011-09-14 00:00:00'));

Убедитесь, что вы установили одинаковые временные зоны на всех системах, использующих date_default_timezone_set, что, вероятно, является причиной вашей реальной проблемы.

3 голосов
/ 13 сентября 2011

Возможно, потому что системы имеют разные часовые пояса или системные часы

2 голосов
/ 13 сентября 2011

Ваш код слишком сложен и в нем есть некоторые странности, но это уже было указано в ответе @ deceze, поэтому я не буду это повторять.

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

Что я скажу, так это то, что я всегда избегал бы использования функции strtotime(), где это возможно, потому что она очень медленная и имеет некоторый потенциал для получения неожиданных результатов, когда дата в неоднозначном формате (то есть dd-mm-yyyy против mm/dd/yyyy). Даже в таких случаях, как ваш, когда ввод не является неоднозначным, он все еще является очень медленным фрагментом кода для того, что он делает, потому что он должен анализировать строку даты, не зная, какой формат ожидать.

Последние версии PHP предоставляют гораздо лучшую альтернативу, если вы занимаетесь арифметикой дат. Ознакомьтесь с date_diff() функцией , а также с другими функциями из DateTime класса . Этот класс обеспечивает намного лучшую функциональность для обработки дат, чем используемые вами методы PHP старого стиля.

Обратите внимание, что для получения максимальной отдачи от класса DateTime вам понадобится последняя версия PHP - то есть PHP 5.3. Но поскольку PHP 5.2 больше не поддерживается, вам все равно следует убедиться, что вы используете 5.3.

Надеюсь, это поможет.

2 голосов
/ 13 сентября 2011

Вероятно, он получает настройки времени от вашего сервера (который имеет переменное время), вы можете установить часовой пояс для всех скриптов, чтобы он давал вам одинаковые значения.*

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