在Perl中如何获得下一个工作日?

but5z9lq  于 2022-11-24  发布在  Perl
关注(0)|答案(1)|浏览(207)

我尝试使用下面的变量计算第二天(例如,星期一/星期二/星期三等)。
示例:本地时间为星期三,我需要星期四,偏移量为+1;日期为星期四,我需要星期一,偏移量为+4

my @days = qw(Sunday Monday Tuesday Wednesday Thursday Friday Saturday);
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime

有没有某种算法我可以制定出这样做?我不能使用Perl中的DateTime & Time::Piece库作为限制。
我使用的是:

my $daysToAdd = 8 - $wday; # picks up how many days there is until next Monday
w1e3prcc

w1e3prcc1#

对于Perl中的基本日期处理,丢弃localtime并使用内置的Time::Piece类。它将执行基本的日期计算。

use strict;
use warnings;
use v5.10;

use Time::Piece;
use Time::Seconds;  # Some useful constants like ONE_DAY

my $now = Time::Piece->new;
say $now;

my $tomorrow = $now + ONE_DAY;
say $tomorrow;

至于计算两个工作日之间的偏移量,请将它们Map为数字并使用这些数字。星期日为0,星期一为1,依此类推。计算两个工作日之间必须提前多少天的算法是...

(7 - $current_dow + $new_dow) % 7

要展开该内容,请执行以下操作:7 - $current_dow是从当前日期到本周末的天数。然后将您想要的日期添加到上面。整个过程是mod 7(因此8变为1),以处理仅向前移动几天的情况(即从周三到周五)。
从周五到周四都这样做...

(7 - 5 + 4) % 7
(2 + 4) % 7
6 % 7
6

从周五到周六都这样做...

(7 - 5 + 6) % 7
(2 + 6) % 7
8 % 7
1

这是密码

my $day = 4; # Thursday
my $days_offset = (7 - $now->day_of_week + $day) % 7;
my $thursday = $now + ($days_offset * ONE_DAY);
say $thursday;

相关问题