Последний день в данном месяце - это "0-й" день следующего месяца. mktime () берет номер месяца, основанный на 0, и номер года, основанный на 1900, и возвращает отметку времени эпохи.
use POSIX qw( mktime strftime );
sub last_day {
my ( $year, $mon ) = @_;
return mktime(0,0,0, 0, $mon, $year-1900);
}
Вы можете передать это localtime
или strftime
.
say scalar localtime last_day(2005, 5)
'Tue May 31 00:00:00 2005'
say scalar localtime last_day(2005, 6)
'Thu Jun 30 00:00:00 2005'
say scalar localtime last_day(1997, 2)
'Fri Feb 28 00:00:00 1997'
say scalar localtime last_day(2012, 2)
'Wed Feb 29 00:00:00 2012'
say (localtime last_day(1997, 2))[3]
'28'
say strftime "%d", localtime last_day(1997, 2)
'28'