perl - 在Perl中如何找到给定日期的前一个星期一的日期?

标签 perl date

我正在寻找一个 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/

相关文章:

perl - 为什么 Email::Stuffer base64 编码与 MIME::Base64 不同以及 utf8 如何适应?

java - 使用 Boolean 类方法比较两个 Date 对象

php - 在 PHP exec 中使用 mktime 运行 C 代码

sql - 将日期聚类为期间

linux - 安装perl时缺少libgdbm

perl - 在 Perl 单元测试中 fork 子进程停止证明;测试::线束退出

algorithm - 在这种情况下如何实现树状数据结构

regex - 在R中使用strptime()从字符串中提取时间,并返回NA

php - date() 仅从日期格式 YYYY-00-00 开始的年份

perl - 需要帮助理解脚本的一部分(全局和引用)