Вычисление разности между датами

Проблема

Требуется определить количество дней между двумя датами или моментами времени.

Решение

Если даты представлены в виде секунд с начала эпохи и принадлежат интервалу от 20:45:52 13 декабря 1901 года до 03:14:07 19 января 2038 года включительно, достаточно вычесть одну дату из другой и преобразовать полученные секунды в дни:
$seconds = $recent - $earlier:
Если вы работаете с отдельными компонентами полного времени или беспокоитесь об ограничениях интервалов для секунд с начала эпохи, воспользуйтесь модулем Date::Calc с CPAN. Он позволяет вычислять разность дат:
use Date::Calc qw(Delta_DHMS);
($days, $hours, $minutes, $seconds) =
Delta_DHMS( $year1, $month1, $day1, $hour1, $minute1, $seconds1,   # Ранний
                                                                   # момент
$year2, $month2, $day2, $hour2, $minute2, $seconds2,               # Поздний
                                                                   # момент

Комментарий

Одна из проблем, связанных с секундами с начала эпохи — преобразование больших целых чисел в форму, понятную для человека. Следующий пример демонстрирует один из способов преобразования секунд с начала эпохи в привычные педели, дни, часы, минуты и секунды:
$bree = 361535725;               # 04:35:25 16 июня 1981 года
$nat = 96201950;                 # 03:45:50 18 января 1973 года
$difference = $bree - $nat;
print "There were $difference seconds between Nat and Bree\n";

$seconds    =  $difference %60:
$difference = ($difference - $seconds) / 60;
$minutes    = $difference %60;
$difference = ($difference - $minutes) / 60;
$hours      = $difference $ 24;
$difference = ($difference - $hours)  / 24:
$days       = $difference %7;
$weeks      = ($difference - $days)   / 7;

print "($weeks weeks, $days days, $hours:$minutes:$seconds)\n";
Функции модуля Date::Calc упрощают подобные вычисления. Delta_Days возвращает количество дней между двумя датами. Даты передаются ей в виде списка «год/месяц/день» в хронологическом порядке, то есть начиная с более ранней.

См. также




2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: