Вычисление разности между датами
Проблема
Требуется определить количество дней между двумя датами или моментами времени.
Решение
Если даты представлены в виде секунд с начала эпохи и принадлежат интервалу от 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 возвращает количество дней между
двумя датами. Даты передаются ей в виде списка «год/месяц/день» в хронологическом
порядке, то есть начиная с более ранней.
См. также
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|