我正在寻找一个 Perl 脚本,它可以为我提供任何指定日期的最后一个星期一。
例如对于日期 2011-06-11,脚本应返回 2011-06-06
最佳答案
我假设如果给定日期是星期一,则您需要相同的日期(而不是前一个星期一)。这是使用 DateTime 实现的一种方法:
use DateTime;
my $date = DateTime->new(year => 2011, month => 6, day => 11);
my $desired_dow = 1; # Monday
$date->subtract(days => ($date->day_of_week - $desired_dow) % 7);
print "$date\n";
(实际上,对于星期一的特殊情况,
% 7
不是必需的,因为 $date->day_of_week - 1
将始终为 0–6,并且 mod 7 是空操作。但对于 % 7
,它适用于任何想要的星期几,而不仅仅是星期一。)如果您确实想要前一个星期一,则可以更改减法:
$date->subtract(days => ($date->day_of_week - $desired_dow) % 7 || 7);
如果您需要解析在命令行上输入的日期,您可能需要查看 DateTime::Format::Natural .
关于perl - 在Perl中如何找到给定日期的前一个星期一的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6262151/