[HELP]Реализация функции.. date :) в обратном порятке

Тема в разделе "PHP", создана пользователем saylar_06, 1 дек 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. saylar_06

    saylar_06 Создатель

    Регистр.:
    7 мар 2009
    Сообщения:
    42
    Симпатии:
    0
    Доброго времени суток! Вот приспичило сделать функцию, и даже не знаю с чего начать :)

    В общем суть функции такова, есть переменная $date = "28.05.2008"; //К примеру

    Хочется создать функцию для обработки этой даты, чтоб на выходе получилось что то типа 2 года 3 месяца назад, или 7 дней назад, или же 23 дня назад :)

    В общем у кого есть какие идеи пишите, очень надеюсь на вашу помощь...

    P.S Хоть подскажите с чего начать, хотя приблизительно я знаю, буду эксперементировать, к стати выдел такое на WordPress(видел на сайте(PHP кода не видел))
     
  2. Phrack

    Phrack

    Регистр.:
    3 ноя 2010
    Сообщения:
    264
    Симпатии:
    38
    PHP:
    function dates_range($date1$date2){
      if (
    $date1<$date2){
        
    $dates_range[]=$date1;
        
    $date1=strtotime($date1);
        
    $date2=strtotime($date2);
        return 
    date('z',$date2-$date1);
      }
    }
    например, вернет разницу в датах в днях, если их разница меньше 365...вот попробуй отсюда начать думать
     
    saylar_06 нравится это.
  3. Hafner

    Hafner Постоялец

    Регистр.:
    9 июл 2008
    Сообщения:
    79
    Симпатии:
    30
    PHP:
    function timeleft$begin,$end ) {

        
    $dif $end $begin;

        
    $years intval($dif/(60*60*24*365));
        
    $dif $dif - ($years*(60*60*24*365));

        
    $months intval($dif/(60*60*24*30));
        
    $dif $dif - ($months*(60*60*24*30));

        
    $weeks intval($dif/(60*60*24*7));
        
    $dif $dif - ($weeks*(60*60*24*7));

        
    $days intval($dif/(60*60*24));
        
    $dif $dif - ($days*(60*60*24));

        
    $hours intval($dif/(60*60));
        
    $dif $dif - ($hours*(60*60));

        
    $minutes intval($dif/(60));
        
    $seconds $dif - ($minutes*60);

        
    $s "";

        if(
    $years == 1) {
            
    $s.= $years."&nbsp;год&nbsp;";
        }

        elseif(
    $years 1) {
            
    $s.= $years."&nbsp;года&nbsp;";
        }

        if(
    $months == 1) {
            
    $s.= $months."&nbsp;месяц&nbsp;";
        }

        elseif(
    $months 1) {
            
    $s.= $months."&nbsp;месяцев&nbsp;";
        }

        if(
    $weeks == 1) {
            
    $s.= $weeks."&nbsp;неделя&nbsp;";
        }

        elseif(
    $weeks 1) {
            
    $s.= $weeks."&nbsp;недель&nbsp;";
        }

        if(
    $days == 1) {
            
    $s.= $days."&nbsp;день&nbsp;";
        } else if(
    $days 1) {
            
    $s.= $days."&nbsp;дней&nbsp;";
        }

        if(
    $hours == 1) {
            
    $s.= $hours."&nbsp;час&nbsp;";
        } else if(
    $hours 1) {
            
    $s.= $hours."&nbsp;часов&nbsp;";
        }

        if(
    $minutes == 1) {
            
    $s.= $minutes."&nbsp;минута";
        } else if(
    $minutes 1) {
            
    $s.= $minutes."&nbsp;минут";
        }

        return 
    $s;
    }
    Простенький пример - не является идеальным решением, но суть раскрывает.
     
    saylar_06 нравится это.
  4. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    на php 5.3 стандартный class - DateTime
    PHP:
    $date_start = new DateTime('28.05.2008');
    $date_end = new DateTime('NOW');

    print_r(date_diff($date_start,$date_end));
     
    saylar_06 нравится это.
  5. saylar_06

    saylar_06 Создатель

    Регистр.:
    7 мар 2009
    Сообщения:
    42
    Симпатии:
    0
    Спасибо всем кто поддерживает мою тему!

    Вот у меня вопрос касательно этой функции, timeleft( $begin,$end ) - какие две переменные должна получить функция? $dif = $end - $begin; и зачем их отнимать?

    P.S Заранее благодарю вас за ответ!
     
  6. Hafner

    Hafner Постоялец

    Регистр.:
    9 июл 2008
    Сообщения:
    79
    Симпатии:
    30
    Вы же писали:

    Количество времени назад - это время прошедшее с искомой даты до текущей отметки timestamp? Тогда передавайте в функцию:
    $begin = искомая метка даты.
    $end = текущее время.

    Отнимаем для того, чтобы понять сколько времени прошло и потом уже это число обрабатываем как нам нужно и выводим в удобном формате.
     
    saylar_06 нравится это.
  7. saylar_06

    saylar_06 Создатель

    Регистр.:
    7 мар 2009
    Сообщения:
    42
    Симпатии:
    0
    хмм, а можно поинтерисоватся почему после переменной $s стоит точка?

    $s.= $month просто обычно записываем $s = $month
     
  8. Phrack

    Phrack

    Регистр.:
    3 ноя 2010
    Сообщения:
    264
    Симпатии:
    38
    конкатенация строк: $s.= $month равносильно $s= $s.$month
     
    saylar_06 нравится это.
Статус темы:
Закрыта.