PERL 使用本地时间我如何计算下一个工作日

PERL Using localtime how am I able to calculate next week day

我正在尝试使用以下变量计算第二天(例如 Monday/Tuesday/Wednesday 等)。

示例:当地时间星期三,我需要星期四,偏移量为+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

感谢任何帮助,谢谢!

对于 Perl 中的基本日期处理,扔掉 localtime 并使用内置的 Time::Piece class. It will do basic date math.

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;

就计算两周之间的偏移量而言,将它们映射到数字并使用这些数字。星期日为 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;