Рассчитайте разницу между датой и временем в PHP

У меня есть объект Date (от Pear) и я хочу вычесть другой объект Date, чтобы получить разницу во времени в секундах.

Я попробовал несколько вещей, но первая просто дала мне разницу в днях, а вторая позволила бы мне конвертировать одно фиксированное время в метку времени Unix, но не объект Date.

        $now = new Date();
        $tzone = new Date_TimeZone($timezone);
        $now->convertTZ($tzone);
        $start = strtotime($now);
        $eob = strtotime("2009/07/02 17:00"); // Always today at 17:00

        $timediff = $eob - $start;

** Примечание ** Всегда будет разница менее 24 часов.

 Brian G02 июл. 2009 г., 16:44
Цель, которую я должен был заявить, состоит в том, чтобы узнать, сколько у меня есть времени до 17:00 в другом часовом поясе, на самом деле это выглядит так много других часовых поясов.
 Carlos Lima02 июл. 2009 г., 16:28
Почему вы переводите только один из них в другой часовой пояс? Разве вы не должны использовать оба в качестве местного времени или оба в целевом TZ?
 Carlos Lima02 июл. 2009 г., 19:35
Обновил мой ответ в соответствии с вашей целью, надеюсь, это поможет.
 Mathew02 июл. 2009 г., 15:28
Формат вывода $ теперь совпадает со строкой, которую вы вводите в strtotime ()? то есть "гггг / мм / дд H: i"
 Milen A. Radev02 июл. 2009 г., 15:30
Возможно, это только я, но я не могу найти описание для "Даты". класс в документации PHP. Из какой он библиотеки?

Ответы на вопрос(5)

что вы должны передавать весь объект Date в strtotime. Используйте один из них вместо этого;

$start = strtotime($now->getDate());

или же

$start = $now->getTime();

некоторые люди хотят иметь разницу во времени на Facebook. Он сообщает вам «минуту назад» или «2 дня назад» и т. Д. Вот мой код:

function getTimeDifferenceToNowString($timeToCompare) {

        // get current time
        $currentTime = new Date();
        $currentTimeInSeconds = strtotime($currentTime);
        $timeToCompareInSeconds = strtotime($timeToCompare);

        // get delta between $time and $currentTime
        $delta = $currentTimeInSeconds - $timeToCompareInSeconds;

        // if delta is more than 7 days print the date
        if ($delta > 60 * 60 * 24 *7 ) {
            return $timeToCompare;
        }   

        // if delta is more than 24 hours print in days
        else if ($delta > 60 * 60 *24) {
            $days = $delta / (60*60 *24);
            return $days . " days ago";
        }

        // if delta is more than 60 minutes, print in hours
        else if ($delta > 60 * 60){
            $hours = $delta / (60*60);
            return $hours . " hours ago";
        }

        // if delta is more than 60 seconds print in minutes
        else if ($delta > 60) {
            $minutes = $delta / 60;
            return $minutes . " minutes ago";
        }

        // actually for now: if it is less or equal to 60 seconds, just say it is a minute
        return "one minute ago";

    }
Решение Вопроса

но учитывая, что у меня есть старая версия PEAR Date, может быть, она работает для вас или дает подсказку о том, как исправить :)

<pre>
<?php
  require "Date.php";

  $now = new Date();
  $target = new Date("2009-07-02 15:00:00");

  //Bring target to current timezone to compare. (From Hawaii to GMT)
  $target->setTZByID("US/Hawaii");
  $target->convertTZByID("America/Sao_Paulo");

  $diff = new Date_Span($target,$now);

  echo "Now (localtime): {$now->format("%Y-%m-%d %H:%M:%S")} \n\n";
  echo "Target (localtime): {$target->format("%Y-%m-%d %H:%M:%S")} \n\n";
  echo $diff->format("Diff: %g seconds => %C");
?>
</pre>

строка - & gt; метка времени будет работать надежно? Вот что здесь делается:

$start = strtotime($now);

В качестве альтернативы вы можете получить метку времени в соответствии сдокументация

$start = $now->getTime();

00, вы можете сделать:

$current_time = mktime (); 
$target_time = strtotime (date ('Y-m-d'. ' 17:00:00')); 
$timediff = $target_time - $current_time;

Не проверял это, но он должен делать то, что вам нужно.

Ваш ответ на вопрос