дата назад? без использования strtime? - PullRequest
2 голосов
/ 23 августа 2010

хорошо, у меня свидание

date('Y-m-d H:i:s');

как мы можем сделать это как 0 секунд назад или х год х месяц х день х минут х секунд назад? но без использования str_time (php 5.3.3)

редактировать *

Я имею в виду some.date - time.now = someyear когда-нибудь месяц когда-нибудь когда-нибудь несколько секунд назад. например, facebook или stackoverflow (обновлено. Я имею в виду вот так. - Адам Рамадан 2 mins ago править)

редактировать * некоторые говорят использовать sktime?

2 минуты назад.

Спасибо

Адам Рамадан

Ответы [ 5 ]

2 голосов
/ 12 марта 2011

Вы должны попробовать это (выглядит точно так же, как ответ на крик, но этот вопрос исправлен!)

<?php
function ago($timestamp){
  $difference = time() - $timestamp;
  $periods = array("second", "minute", "hour", "day", "week", "month", "years", "decade");
  $lengths = array("60","60","24","7","4.35","12","10");
  for($j = 0; $difference >= $lengths[$j]; $j++)
  $difference /= $lengths[$j];
  $difference = round($difference);
  if($difference != 1) $periods[$j].= "s";
  $text = "$difference $periods[$j] ago";
  return $text;
 }
?>

Просто сделайте это ---

echo ago($timeofthethingyouwant);

И помните, что это работаетс этим типом формата времени ----

time(); //Or it looks like this 1299951275!

Это работает точно, и это отличный и легкий сценарий!Для получения дополнительной головы по этой ссылке -

http://drupal.org/node/61565

Надеюсь, что это работает!

1 голос
/ 24 августа 2010

Я нашел следующую функцию при поиске в Google, я проверил код, и он, кажется, работает отлично.

function ago($timestamp){
   $difference = time() - $timestamp;
   $periods = array("second", "minute", "hour", "day", "week", "month", "years", "decade");
   $lengths = array("60","60","24","7","4.35","12","10");
   for($j = 0; $difference >= $lengths[$j]; $j++)
   $difference /= $lengths[$j];
   $difference = round($difference);
   if($difference != 1) $periods[$j].= "s";
   $text = "$difference $periods[$j] ago";
   return $text;
  }

вы бы тогда назвали это

echo ago($time);
1 голос
/ 23 августа 2010
function nicetime($fromDate, $toDate = NULL, $precision = -1, $separator = ', ', $divisors = NULL) {

    if ( is_null( $toDate ) ) {
        $toDate = $this->date_get('Asia/Jakarta');
    }

    // Determine the difference between the largest and smallest date
    $dates = array(strtotime($fromDate), strtotime($toDate));
    $difference = max($dates) - min($dates);

    // Return the formatted interval
    return $this->format_interval($difference, $precision, $separator, $divisors);

}

/**
* Formats any number of seconds into a readable string
*
* @param int Seconds to format
* @param string Seperator to use between divisors
* @param int Number of divisors to return, ie (3) gives '1 Year, 3 Days, 9 Hours' whereas (2) gives '1 Year, 3 Days'
* @param array Set of Name => Seconds pairs to use as divisors, ie array('Year' => 31536000)
* @return string Formatted interval
*/
function format_interval($seconds, $precision = -1, $separator = ', ', $divisors = NULL)
{

    // Default set of divisors to use
    if(!isset($divisors)) {
        $divisors = Array(
            'Year'      => 31536000, 
            'Month'     => 2628000, 
            'Day'       => 86400, 
            'Hour'      => 3600, 
            'Minute'    => 60, 
            'Second'    => 1);
    }

    arsort($divisors);

    // Iterate over each divisor
    foreach($divisors as $name => $divisor)
    {
        // If there is at least 1 of thie divisor's time period
        if($value = floor($seconds / $divisor)) {
            // Add the formatted value - divisor pair to the output array.
            // Omits the plural for a singular value.
            if($value == 1)
                $out[] = "$value $name";
            else
                $out[] = "$value {$name}s";

            // Stop looping if we've hit the precision limit
            if(--$precision == 0)
                break;
        }

        // Strip this divisor from the total seconds
        $seconds %= $divisor;
    }

    // FIX
    if (!isset($out)) {
        $out[] = "0" . $name;
    }

    var_dump($out);
    // Join the value - divisor pairs with $separator between each element
    return implode($separator, $out);

}
1 голос
/ 23 августа 2010

Почему бы просто не вычесть 30 из результата time()?

date('Y-m-d H:i:s',time()-30);

time() возвращает текущее время, измеренное в терминах количества секунд с начала эпохи, поэтому вычитая 30 из него, получаем временную метку времени 30 сек назад

0 голосов
/ 23 августа 2010

Довольно просто - вам нужны стартовые и текущие временные метки. Например, чтобы увидеть количество минут, прошедших с даты начала этого вечера (22.08.2010, 21:00 по тихоокеанскому времени):

$start = strtotime('8/22/2010 9pm');
printf('%d minutes ago', (time() - $start) / 60);
// My Output: 36 minutes ago. Will vary, depending on the current time/zone.

Делитель 60 - это минуты. В течение нескольких секунд не было никакого разделения. Для часов, дней, лет и т. Д. Используйте разные делители. Следующее решение имеет пример функции для форматирования временных меток:

Как отобразить "12 минут назад" и т. Д. На веб-странице PHP?

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