Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8933[/thread]

Kleines Rechenproblem mit Date::Calc: Will einen Monat von heute zurückrechnen (Seite 2)

Leser: 2


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
krusty
 2007-04-20 16:50
#76078 #76078
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Da ich das human datum nicht brauche, lasse ich einfach die Zeile $month++; raus.

Ist zwar total bescheuert, aber anders sehe ich keine Möglichkeit.

PS: Ich hasse es mit Zeiten zu rechnen.

EDIT:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl

use strict;
use warnings;
use Time::Local;

my ($day,$month,$year) = (localtime)[3..5];
$year+=1900;
my $month2 = "";

if ( $month == 1 )
{
        $month2 = 12;
}
else
{
        $month2 = $month-1;
}

my $time_now = timelocal(1, 0, 0, $day, $month, $year);
my $time_old = timelocal(1, 0, 0, $day, $month2, $year);
print "Debug: $time_now\n";
print "Debug: $time_old\n";


So geht es auch.\n\n

<!--EDIT|krusty|1177073525-->
renee
 2007-04-20 17:05
#76079 #76079
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da wirst Du einen Fehler bekommen, wenn Du vom 1.1. zurückrechnest, weil Du dann vom falschen Jahr den Timestamp holst.

Das $year += 1900 brauchst Du auch nicht...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Dubu
 2007-04-21 03:22
#76080 #76080
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ich würd's vielleicht mit Date::Manip machen, wie von renee gezeigt.

Wenn es Date::Calc sein soll, geht es natürlich etwas einfacher als bisher mit der Hin- und Her-Rechnerei gezeigt:
Code: (dl )
1
2
3
4
5
use strict;
use warnings;
use Date::Calc qw(Today Add_Delta_YM Mktime Now);

print Mktime(Add_Delta_YM(Today, 0, -1), Now);


Wenn das Skript nicht am ersten, sondern am letzten Tag eines Monats ausgeführt werden sollte, müsste aber erst spezifiziert werden, was genau "einen Monat zurückrechnen" bedeutet: Ist "einen Monat zurück" vom 31. Juli jetzt der 30. Juni oder der 1. Juli? Den 31. Juni gibt es ja nicht...
nepos
 2007-04-21 14:09
#76081 #76081
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, ich persönlich benutze da immer Class::Date. Da kann man sowas a la
Code: (dl )
my $date = now() - '1 M';
machen, was genau das ist, was du willst ;)
topeg
 2007-04-21 16:06
#76082 #76082
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Monate werden doch von 0 bis 11 gerechnet aber sollen als 1 bis 12 angezeigt werden. Wenn man allso 1 drauf rechnet, damit das Datum für den Leser richtig ist, dann muß man nacher die 1 wieder anziehen, damit der Computer richtig rechnet.
Allso braucht man garnicht den Übergang vom 1ten auf den 12ten beachten, da für den Computer der übergang von 0ten auf den 11erfolgt.
krusty
 2007-04-22 12:07
#76083 #76083
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Sehr gut topeg,

jetzt ist der Groschen auch bei mir gefallen. ;) Hat ja lange genug gedauert.

Danke @ all, für die Unterstützung.
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2007-04-20 15:46.