Разница между датами

zerkms

TDD infected
Команда форума
Разница между датами

Здравствуйте товарищи
Ответьте пожалуйста на следующие 3 вопроса (с точки зрения обывателя, пользователя ПО)

1. Какова разница между 31 янв 2008 и 1 мар 2008
2. Какова разница между 1 фев 2008 и 1 мар 2008
3. Сколько будет 31 янв 2008 + 1 месяц

PS: все ответы давайте в том виде, в котором вы обычно употребляете временные интервалы в обычной речи (потому как вы пользователи, а не технические специалисты)

Спасибо ;)
 

Dovg

Продвинутый новичок
1. один месяц и один день
2. 1 месяц
3. 28(29) февраля
естественно ИМХО
 

SaNeK

Новичок
1. месяц
2. месяц
3. "март месяц" - какое именно - считать лень =)

отвечаю, как обычный пользователь. Не задумываясь.
 

zerkms

TDD infected
Команда форума
Dovg
тебе персонально ещё пара вопросов (базирующихся на ответе на вопрос 3)

"Сколько будет 31 янв 2008 + 1 месяц" == 28(29) фев, отсюда:
1. сколько между 29 фев 2008 и 31 янв 2008
2. сколько между 29 фев 2008 и 29 янв 2008
? ;)
 

asterisk

Новичок
решал подобную задачку, долго ломали голову как лучше показывать. :)

1. 1 месяц 1 день
2. 1 месяц
3. 28(29) февраля

-~{}~ 31.10.07 16:13:

1. сколько между 29 фев 2008 и 31 янв 2008
2. сколько между 29 фев 2008 и 29 янв 2008
1. 1 месяц
2. 31 дней ИЛИ 1 месяц
 

zerkms

TDD infected
Команда форума
если уж разговор о функциях
переписал я тут свою старую функцию одну, и вот хочу узнать насколько результаты будут коррелировать с мнением "обычных людей" ;)

PHP:
<?php

/**
* Calculate difference between two timestamps
* @param string $date_start start date in unix timestamp
* @param string $date_finish finish date in unix timestamp
* @return array the result array in the follow format: 0 => seconds, 1 => minutes, 2 => hours, 3 => days, 4 => months, 5 => years
* @author zerkms (Ivan Kurnosov)
*/

function calc_period($date_start, $date_finish) {
                $st = explode('-', date('d-m-Y-H-i-s', $date_start));
                $fin = explode('-', date('d-m-Y-H-i-s', $date_finish));

                if (($seconds = $fin[5] - $st[5]) < 0) {
                        $fin[4]--;
                        $seconds += 60;
                }

                if (($minutes = $fin[4] - $st[4]) < 0) {
                        $fin[3]--;
                        $minutes += 60;
                }

                if (($hours = $fin[3] - $st[3]) < 0) {
                        $fin[0]--;
                        $hours += 24;
                }

                if (($days = $fin[0] - $st[0]) < 0) {
                        $fin[1]--;
                        $days = date('t', mktime(1, 0, 0, $st[1], $st[0], $st[2])) - $st[0] + $fin[0];
                }

                if (($months = $fin[1] - $st[1]) < 0) {
                        $fin[2]--;
                        $months += 12;
                }

                $years = $fin[2] - $st[2];
                
                return array($seconds, $minutes, $hours, $days, $months, $years);
}


// Примеры использования

$date_finish = strtotime("1-03-2100");
$date_start = strtotime("28-02-2100");

$result = calc_period($date_start, $date_finish);

echo 'C ' . date('h:i:s d-m-y', $date_start) . ' по '. date('h:i:s d-m-y', $date_finish) .
    ' прошло ' . $result[0] . ' секунд ' . $result[1] . ' минут ' . $result[2] . ' часов ' .
    $result[3] . ' дней ' . $result[4] . ' месяцев ' . $result[5] . ' лет <br>';


?>
 

SelenIT

IT-лунатик :)
Имхо, пока разница меньше количества дней в месяце начала интервала, целесообразно показывать именно дни (31.01-29.02 - 29 дней; 30.01-29.02 - 30 дней; 29.01-29.02 - 1 месяц). Так что, имхо, функция все правильно делает.
 
Сверху