看起来像是DateTime的工作(通常建议在Perl中操作日期的模块).这个小例子应该回答你的两个问题:
use strict;
use warnings;
use DateTime;
my $d = DateTime->now;
while ( $d->day_of_week != 4 ) {
$d->subtract( days => 1 );
}
print $d->ymd;
Run Code Online (Sandbox Code Playgroud)
其他帖子也使用DateTime,但是他们发布了这个帖子地址.
use DateTime qw( );
my $dt = DateTime->today( time_zone => 'local' );
$dt->subtract( days => ($dt->day_of_week - 4) % 7 );
say $dt->ymd(''); # 20111117
Run Code Online (Sandbox Code Playgroud)
解决的问题:
today而不是now因为你只处理日期.注意:
更新:上述某些时区的某些日期可能会失败.(并非所有日子都有午夜!)解决方案:
use DateTime qw( );
my $dt = DateTime->now( time_zone => 'local' );
$dt->set_time_zone('floating');
$dt->truncate( to => 'days' );
$dt->subtract( days => ($dt->day_of_week - 4) % 7 );
say $dt->ymd(''); # 20111117
Run Code Online (Sandbox Code Playgroud)