In Perl Wie finde ich das Datum des letzten Montag für ein bestimmtes Datum?

8

Ich suche nach einem Perl-Skript, das mir den letzten Montag für ein bestimmtes Datum geben kann.

z.B. Für das 2011-06-11 Datum sollte das Skript 2011-06-06

zurückgeben     
anilmwr 07.06.2011, 07:51
quelle

9 Antworten

24

Ich gehe davon aus, dass wenn das angegebene Datum ein Montag ist, Sie dasselbe Datum (und nicht den vorherigen Montag) möchten. Hier ist eine Möglichkeit, dies mit DateTime zu tun:

%Vor%

(Eigentlich ist der % 7 für den speziellen Fall von Montag nicht notwendig, weil $date->day_of_week - 1 immer 0-6 ist und dass Mod 7 ein No-Op ist. Aber mit dem % 7 , Es funktioniert für jeden gewünschten Wochentag, nicht nur für Montag.

Wenn Sie den vorherigen Montag haben wollten, können Sie die Subtraktion ändern:

%Vor%

Wenn Sie ein in der Befehlszeile eingegebenes Datum analysieren müssen, sollten Sie sich DateTime ansehen: : Format :: Natürlich .

    
cjm 07.06.2011, 08:37
quelle
12

Sie könnten auch Time :: ParseDate verwenden, die "letzten Montag" verstehen.

Ein One-Liner, um den Ruf von Perl zu erhalten:

%Vor%

Und ein vernünftiges Skript:

%Vor%

Ein paar Notizen: Wenn das Datum ein Montag ist, dann erhalten Sie den vorherigen Montag, der vielleicht nicht das ist, was Sie wollen, um das JETZT auf den nächsten Tag zu setzen ( addiere 60 * 60 * 24, ein Tag, zu $ ​​date_epoch). Dann ist Time :: ParseDate ziemlich liberal, es wird zum Beispiel 2011-23-38 glücklich parsen (wie 2012-12-09).

    
mirod 07.06.2011 08:41
quelle
3

Ziemlich einfaches Zeug mit der Standard-Perl-Bibliothek.

%Vor%

Ich überlasse es dem Leser als Übung, die verschiedenen Module und Funktionen nachzuschlagen.

Es ist wahrscheinlich noch einfacher, wenn Sie DateTime verwenden.

    
Dave Cross 07.06.2011 08:48
quelle
3

Im Geist von Perl gibt es mehr als einen Weg, es zu tun.

%Vor%     
DavidO 07.06.2011 09:06
quelle
2

Sie könnten Date :: Manip verwenden, das eine Funktion Date_GetPrev hat und "Montag"

%Vor%     
oylenshpeegul 07.06.2011 12:38
quelle
1

Zellers Kongruenz gibt Ihnen den Tag der Woche. Von dort sollte es ziemlich einfach sein.

    
Jerry Coffin 07.06.2011 07:54
quelle
1

Am Ende davon hat $tstamp den gewünschten Zeitstempel:

%Vor%

Dies setzt voraus, dass mit "letzter Montag" der letzte vorkommende Montag vor des gegebenen Tages gemeint ist. "Wenn also der Wochentag Montag (1) ist, wird er subtrahiert und zusätzlich 7 .

    
Axeman 07.06.2011 12:47
quelle
0

Wenn Sie ein Sklave wie ich sind und eine korporative Perl ohne Bibliotheken benutzen müssen, dürfen Sie sie auch nicht altmodisch installieren:

%Vor%

Hoffe es hilft jemandem!

    
Cristina 13.02.2014 16:11
quelle
0

Es gibt viele Möglichkeiten, dies in Perl zu tun. Hier ist, wie es mit der Perl-Bibliothek Moment gemacht werden kann.

%Vor%     
bessarabov 13.09.2016 15:28
quelle

Tags und Links