1
Perl / Увеличение даты
« : 08 Февраля 2009, 20:58:36 »Цитировать
Yaroslav:
еще такой вопрос. если есть дата к примеру 20-05-2004
можно ли сравнить ее с localtime(time) что б разница выводилась в количистве дней?
ВСЕМ привет!

на днях тоже столкнулся с вычислением разницы двух дат и конечно же хотелось обойтись стандартными модулями. Вот, что у меня получилось ... может кому-то пригодицца
#!D:/www/Perl/bin/perl.exe
print "Content-type: text/html; charset=windows-1251\\n\\n";
use strict;
use Time::Local;
# Текущая дата
my ($sec,$min,$hrn,$day,$mon,$yrn,$wkn,$ydn,$dst) = localtime(time);
$mon = $mon+1;
if ($mon < 10) {$mon = "0$mon";}
if ($day < 10) {$day = "0$day";}
if ($hrn < 10) {$hrn = "0$hrn";}
if ($min < 10) {$min = "0$min";}
if ($sec < 10) {$sec = "0$sec";}
$yrn = 1900 + $yrn;
my $date= "$day\\-$mon\\-$yrn";
my $time= "$hrn\\:$min\\:$sec";
# Начальная дата
my $begDate = "01-01-2009";
# Конечная дата
my $endDate = "01-01-2010";
# Парсим начальную дату на день месяц и год, разделитель "-"
my ($beg1, $beg2, $beg3) = split (/-/,$begDate);
# Парсим конечную дату на день месяц и год, разделитель "-"
my ($end1, $end2, $end3) = split (/-/,$endDate);
# Вычисляем сколько прошло секунд до начальной даты
my $begDateSec = timelocal(0, 0, 0, $beg1, $beg2-1, $beg3);
# Вычисляем сколько прошло секунд до конечной даты
my $endDateSec = timelocal(0, 0, 0, $end1, $end2-1, $end3);
# Вычисляем разницу в секундах от начальной даты до конечной
my $difDateSec = $endDateSec - $begDateSec;
# Вычисляем разницу в сутках от начальной даты до конечной
my $difDateSut = $difDateSec / 86400;
# Вывод результатов
print "Текущая дата: $date $time (" . time . " сек)";
print "
";
print "Начальная дата: $begDate ($begDateSec сек)";
print "
";
print "Конечная дата: $endDate ($endDateSec сек)";
print "
";
print "Разница: $difDateSut сут ($difDateSec сек)";
Результат
Текущая дата: 08-02-2009 20:56:52 (1234115812 сек)
Начальная дата: 01-01-2009 (1230757200 сек)
Конечная дата: 01-01-2010 (1262293200 сек)
Разница: 365 сут (31536000 сек)