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 .
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).
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.
Sie könnten Date :: Manip verwenden, das eine Funktion Date_GetPrev
hat und "Montag"
Zellers Kongruenz gibt Ihnen den Tag der Woche. Von dort sollte es ziemlich einfach sein.
Es gibt viele Möglichkeiten, dies in Perl zu tun. Hier ist, wie es mit der Perl-Bibliothek Moment gemacht werden kann.
%Vor%