2016-04-15 16 views
-2

次の変数を使用して翌日(月曜日/火曜日/水曜日など)を計算しようとしています。PERL localtimeを使用する翌週の日を計算する方法

例:localtimeの日は水曜日であると私は木曜日が必要な、オフセットが+1され、日が木曜日で、私は月曜日必要、4

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

であることは、私が出て働くことができるアルゴリズムのいくつかの並べ替えがありますオフセットこれをする?私はDateTime & Time :: PieceライブラリをPerlで使用することができません。

私が使っていた:

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

すべてのヘルプは高く評価され、ありがとうございました!

+0

翌週(M-F、週末の反対)または翌週の曜日を探していますか?前者の場合、木曜日以降の翌平日は月曜日ではなく、金曜日です。 – ThisSuitIsBlackNot

+0

私は次の月曜日を探していますが、今週の月曜日の場合は、来週にそれを探していきたいと思います。それが助けば。 –

+0

それは明らかです。あなたの質問を編集して、それが現在はっきりしていないと言ってください(Schwernはあなたが1日追加する方法を尋ねていると思っていました)。 – ThisSuitIsBlackNot

答えて

3

Perlでの基本的な日付処理については、localtimeを投げ捨て、Time::Pieceクラスに組み込みます。 It will do basic date math。限り、2週間の日の間のオフセットを計算すると、数字にマッピングし、それらの番号を使用

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などとなります。それを拡大するには...あなたは2つの平日の間で進めるために持って何日

(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; 
+0

別の制限としてTime :: Pieceを使用できません –

+2

@JohnnyDoeyなぜTime :: Pieceを使用できませんか?人々がモジュールを使うことができないと言う普通の理由は、モジュールをインストールできないからですが、Time :: PieceはPerl 5.10以降のコアモジュールでした。オッズはあなたがすでにそれを持っていることが良いです。 – ThisSuitIsBlackNot

+0

ええ、私は試しました。与えられたサーバーは私によって更新されず、Perl 5.16はTime :: Pieceを持っていないようです。 –

関連する問題