有没有办法找出月的第一天(最小日)和一个月的最后一天(最大日),给定月份作为输入,使用Perl中的DateTime?
到目前为止,我想出了如何通过第一个日期,最后一天给我一系列的日子.
但是现在我想做的只是一个月的时间,就像201203一样,返回最后一个maxday.
是否可以使用DateTime?
此外,我想将日期格式掩码从YYYYMMDD更改为YYYY-MM-DD.
use strict; use warnings; use DateTime; unless(@ARGV==2) { print "Usage: myperlscript first_date last_date\n"; exit(1); } my ($first_date,$last_date)=@ARGV; my $date=DateTime->new( { year=>substr($first_date,4),month=>substr($first_date,4,2),day=>substr($first_date,6,2) }); while($date->ymd('') le $last_date) { print $date->ymd('') . "\n"; #$date->add(days=>1); #every day $date->add(days=>30); }
预期成绩:
2012-03-01 2012-03-31
解决方法
DateTime为你做了最新数学.你可以告诉你要使用哪个字符作为分隔符:
use DateTime; my( $year,$month ) = qw( 2012 2 ); my $date = DateTime->new( year => $year,month => $month,day => 1,); my $date2 = $date->clone; $date2->add( months => 1 )->subtract( days => 1 ); say $date->ymd('-'); say $date2->ymd('-');
在“Last day of the month. Any shorter”的Perlmonks有很多例子,我发现谷歌“perl datetime last day of month”.
这是一个Time::Moment的例子.这是一个更精简,更快的DateTime子集:
use v5.10; use Time::Moment; my( $year,$month ) = qw( 2012 2 ); my $tm = Time::Moment->new( year => $year,); my $tm2 = $tm->plus_months( 1 )->minus_days( 1 ); say $tm->strftime('%Y-%m-%d'); say $tm2->strftime('%Y-%m-%d');