Помогите с датой и временем

Discussion in 'PHP' started by K.D.K, 12 Jul 2010.

  1. K.D.K

    K.D.K New Member

    Joined:
    12 Jul 2010
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Допустим есть дата
    $date='20.5.2010 20:00';

    и возьмем сегодняшнюю дату(12.07.2010 23:00).
    Как можно узнать сколько прошло минут или дней.
    Обычное вычитание на ничего не даст может подскажите кто как решил данную проблему.


    Заранее СПС.
     
  2. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    В Delphi так делал:
    function CalculateAge(Birthday, CurrentDate: TDate): Integer;
    var
    Month, Day, Year, CurrentYear, CurrentMonth, CurrentDay: Word;
    begin
    DecodeDate(Birthday, Year, Month, Day);
    DecodeDate(CurrentDate, CurrentYear, CurrentMonth, CurrentDay);

    if (Year = CurrentYear) and (Month = CurrentMonth) and (Day = CurrentDay) then
    begin
    Result := 0;
    end
    else
    begin
    Result := CurrentYear - Year;
    if (Month > CurrentMonth) then
    Dec(Result)
    else
    begin
    if Month = CurrentMonth then
    if (Day > CurrentDay) then
    Dec(Result);
    end;
    end;
    end;

    Впринципе, нет ничего сложного чтобы переписать на php.
     
  3. K.D.K

    K.D.K New Member

    Joined:
    12 Jul 2010
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    А на php???
     
  4. bjong

    bjong Elder - Старейшина

    Joined:
    26 Jul 2003
    Messages:
    41
    Likes Received:
    12
    Reputations:
    18
    Примерно так) если не парится с год\лет минут\минуты и.т.д.
    PHP:
    <?php 
    $today
    =time(); 
    $date2=1274396400;
    $total $today-$date2;
     
    $seconds_in_a_year 3600 24 365
    $years floor($total $seconds_in_a_year); 
    $rest $total $seconds_in_a_year
     
    $seconds_in_a_month 3600 24 30
    $months floor ($rest $seconds_in_a_month); 
    $rest $rest $seconds_in_a_month
     
    $seconds_in_a_day 3600 24
    $days floor ($rest $seconds_in_a_day); 
    $rest $rest $seconds_in_a_day
     
    $hours floor ($rest 3600); 
    $rest $rest 3600
     
    $minutes floor ($rest 60); 
    $rest $rest 60
     
    $seconds $rest
     
    print 
    "$years год, $months месяц, $days день, $hours час, $minutes минут и $seconds секунд"

    ?>
    Результат выполнения скрипта: 0 год, 1 месяц, 23 день, 2 час, 1 минут и 6 секунд
     
    #4 bjong, 13 Jul 2010
    Last edited: 13 Jul 2010
  5. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Разницу дат можно посчитать с использованием функции PHP strtotime()

    PHP:
    <?php
    $old_date 
    '20.5.2010 20:00';

    $diff time() - strtotime($old_date);
    $fullDays floor($diff/(60*60*24));
    $fullHours floor(($diff-($fullDays*60*60*24))/(60*60));
    $fullMinutes floor(($diff-($fullDays*60*60*24)-($fullHours*60*60))/60);

    print 
    "Прошло $fullDays дней, $fullHours часов и $fullMinutes минут";
    ?>
     
    #5 GRRRL Power, 13 Jul 2010
    Last edited: 13 Jul 2010
  6. [G]eaR

    [G]eaR Banned

    Joined:
    13 Jul 2010
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    strtotime() считает
     
  7. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Просто перевести в unix формат и отнять, затем опять перевести.
     
  8. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    а поправки на месяцы?
     
  9. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Уточните
     
  10. K.D.K

    K.D.K New Member

    Joined:
    12 Jul 2010
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Всем огромное СПС!