2016-04-15 22 views
-2

Ich versuche, den nächsten Tag (z. B. Montag/Dienstag/Mittwoch etc.) mit den folgenden Variablen zu berechnen.PERL Verwendung von localtime wie kann ich nächste Woche berechnen Tag

Beispiel: localtime Tag ist Mittwoch, und ich benötigen Donnerstag, der seinen +1 versetzen, ist Tag Donnerstag und ich benötige Montag, Offset +4

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

eine Art Algorithmus Gibt es bin ich arbeiten kann um dies zu tun? Ich kann DateTime & Time :: Piece Bibliothek in Perl nicht als Einschränkung verwenden.

Ich war mit:

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

Jede Hilfe ist willkommen, danke!

+0

Sie versuchen, den nächsten Wochentag (M-F, Gegenteil von Wochenende) oder den nächsten Tag der Woche zu finden? Wenn der erste, der nächste Wochentag nach Donnerstag Freitag ist, nicht Montag. – ThisSuitIsBlackNot

+0

Ich möchte den nächsten Montag finden, wenn es derzeit Montag ist, ich wünsche, dass es nächste Woche findet. Wenn das hilft. –

+0

Okay, das klärt es. Bitte [bearbeiten] Sie Ihre Frage, um zu sagen, dass es momentan sehr unklar ist (Schwern dachte, dass Sie fragen würden, wie man einen Tag hinzufügt). – ThisSuitIsBlackNot

Antwort

3

Für grundlegende Datumsverarbeitung in Perl, werfen Sie localtime weg und verwenden Sie die eingebaute Time::Piece Klasse. 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; 

Was den Versatz zwischen zwei Wochentagen Berechnung, Karte, sie zu Zahlen und die Zahlen verwenden. Sonntag ist 0, Montag ist 1 und so weiter. Der Algorithmus für herauszufinden, wie viele Tage Sie zwischen zwei Wochentag vorrücken müssen, ist ...

(7 - $current_dow + $new_dow) % 7 

Um das zu erweitern out: 7 - $current_dow ist, wie viele Tage ab dem heutigen Tag bis zum Ende der Woche. Dann fügst du deinen Wunschtag hinzu. Die ganze Sache ist Mod 7 (also 8 wird 1), um den Fall von nur ein paar Tagen (dh Mittwoch bis Freitag) zu bewegen.

es für Freitag bis Donnerstag zu tun ist ...

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

es für Freitag auf Samstag zu tun ist ...

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

Und hier ist der Code.

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

Ich kann Time :: Piece nicht als weitere Einschränkung verwenden –

+2

@JohnnyDoey Warum können Sie Time :: Piece nicht verwenden? Der übliche Grund, warum Leute sagen, dass sie keine Module verwenden können, ist, dass sie sie nicht installieren können, aber Time :: Piece war seit Perl 5.10 ein Kernmodul; Die Chancen stehen gut, dass Sie es bereits haben. – ThisSuitIsBlackNot

+0

Ja, ich habe es versucht. Die Server, die wir erhalten, können nicht von mir aktualisiert werden und ihre Perl 5.16 scheint nicht Time :: Piece zu haben. –