在Perl中,我怎样才能找到上周四的日期?

use*_*234 0 perl date

可能重复:
在Perl中,如何查找给定日期的上一个星期一的日期?

在perl中,如何编写函数来获取上周四的日期?今天(11月21日),我想得到11/17.如何确定某个特定日期是否为星期日?

lar*_*sen 7

看起来像是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)

  • print $ d-> ymd(''); (3认同)

ike*_*ami 6

其他帖子也使用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)