在Perl中查找日期范围内的周数

在Perl中查找日期范围内的周数,perl,date-manipulation,Perl,Date Manipulation,我有一系列的日期,比如说2012-01-30。。2012-04-06——表示在这些日期内的一组周。这几周的时间从1到10。给定今天的日期(例如,2012-02-29),我希望能够获得范围内的周数(在本例中为5)。如何在Perl中实现这一点?包具有将字符串解析为时间对象的方法和指示时间对象的周数的方法 use Time::Piece; my @dates = ('2012-01-30', ..., ...., '2012-04-06'); foreach my $strdate (@dates)

我有一系列的日期,比如说2012-01-30。。2012-04-06——表示在这些日期内的一组周。这几周的时间从1到10。给定今天的日期(例如,2012-02-29),我希望能够获得范围内的周数(在本例中为5)。如何在Perl中实现这一点?

包具有将字符串解析为时间对象的方法和指示时间对象的周数的方法

use Time::Piece;
my @dates = ('2012-01-30', ..., ...., '2012-04-06');

foreach my $strdate (@dates) {
    my $date = Time::Piece->strptime($strdate, "%Y-%m-%d");
    print "Number of week for '$strdate' is " . $date->week . "\n";
}
你所需要做的只是数一数在你的范围内独特的周数

包具有将字符串解析为时间对象的方法和指示时间对象的周数的方法

use Time::Piece;
my @dates = ('2012-01-30', ..., ...., '2012-04-06');

foreach my $strdate (@dates) {
    my $date = Time::Piece->strptime($strdate, "%Y-%m-%d");
    print "Number of week for '$strdate' is " . $date->week . "\n";
}

你所需要做的只是数一数在你的范围内独特的周数

结束日期的值没有任何区别,除非您希望合并一些值检查。您需要的值为周(开始日期)-周(此日期)+1。我推荐使用
Date::Calc
模块,因为它整洁高效。代码如下所示

use strict;
use warnings;

use Date::Calc 'Week_Number';

sub week {
  Week_Number(split /-/, $_[0]);
}

print week('2012-02-29') - week('2012-01-30') + 1, "\n";
输出

5

结束日期的值没有任何区别,除非您希望合并一些值检查。您需要的值为周(开始日期)-周(此日期)+1。我推荐使用
Date::Calc
模块,因为它整洁高效。代码如下所示

use strict;
use warnings;

use Date::Calc 'Week_Number';

sub week {
  Week_Number(split /-/, $_[0]);
}

print week('2012-02-29') - week('2012-01-30') + 1, "\n";
输出

5

你的工作周从星期一开始吗?日期范围总是从周一开始到周五结束吗?你的一周是从周一开始吗?日期范围是否总是从周一开始到周五结束?如果这对用户很重要,date::Calc不是一个核心模块,而Time::Piece是从v5.9开始的。5@JRFerguson:因为我已经使用了
Date::Calc
,所以这不是一个真正的问题。如果它对用户很重要,那么Date::Calc不是一个核心模块,而Time::Piece是从v5.9开始的。5@JRFerguson:因为我已经使用了
Date::Calc
,所以这不是一个真正的问题。这是一个简洁的解决方案,但需要我扩展数组
@dates
,并迭代它,计算唯一的周数。是的,它可以工作,并且不需要任何非核心模块,但我更喜欢较小的(在代码方面)解决方案。这是一个简洁的解决方案,但需要我扩展数组
@dates
并迭代它,计算唯一的周数。是的,它可以工作,不需要任何非核心模块,但我更喜欢较小的(在代码方面)解决方案。