У меня есть объект Date (from Pear) и вы хотите вычесть другой объект Date, чтобы получить разницу во времени в секундах.
Я пробовал несколько вещей, но первый просто дал мне разницу в днях, а второй позволил мне преобразовать одно фиксированное время в timestamp 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-часовая разница.
Все еще давали несколько неправильные значения, но учитывая, что у меня есть старая версия 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>
Вы уверены, что преобразование объекта Pear Date -> string -> timestamp будет работать надежно? Вот что делается здесь:
$start = strtotime($now);
В качестве альтернативы вы можете получить временную метку, подобную этой, согласно документации
$start = $now->getTime();
Чтобы сделать это без груши, чтобы найти секунды до 17:00, вы можете сделать:
$current_time = mktime (); $target_time = strtotime (date ('Ym-d'. ' 17:00:00')); $timediff = $target_time - $current_time;
Не проверял его, но он должен делать то, что вам нужно.
Я не думаю, что вы должны передать весь объект 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"; }