Schrift
[thread]7577[/thread]

Datum: 1 des Monats minus 1Tag

Leser: 2


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
dani
 2005-12-27 09:24
#61372 #61372
User since
2005-03-07
38 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen!

Ich habe eine Frage:
Wenn das Datum z.B. der 1.März ist, und ich muss einen Tag abrechnen, wie kann ich herausfinden wieviele Tage der vorherigehende Monat dann im laufenden Jahr hat?

Ich brauche dies um Reports zu filtern von dem vorhergehenden Tag.

Vielen Dank im voraus

Dani
renee
 2005-12-27 10:05
#61373 #61373
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Benutze am besten eines der vielen Module auf CPAN (z.B. CPAN:Date::Calc).

Damit kannst Du direkt den Tag vorher berechnen und musst Dir nicht noch Gedanken ueber Schaltjahr oder nicht, 30-,31- oder 28 Tage Monat machen...

Die Funktion, die Dich besonders interessieren duerfte ist Add_Delta_Days...

Edit: Funktionsnamen berichtigt...\n\n

<!--EDIT|renee|1135670777-->
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/
dani
 2005-12-27 11:37
#61374 #61374
User since
2005-03-07
38 Artikel
BenutzerIn
[default_avatar]
Vielen Dank! :D
bloonix
 2005-12-27 15:56
#61375 #61375
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo dani,

deine Frage ist zwar schon beantwortet worden ...

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
24
25
26
27
28
29
30
31
32
33
   # $nmb enthält die Anzahl Tage, die vom heutigen
   # Datum abgezogen werden sollen ...
   my $nmb = 374672;

   my @tm  = (localtime);
   $tm[5] += 1900;
   $tm[4]++;

   while ($nmb--) {
      $tm[3]--;
      if ($tm[3] == 0) {
         $tm[4]--;
         if ($tm[4] == 0) {
            $tm[4] = 12;
            $tm[5]--;
         }
         if ($tm[4] =~ /^(1|3|5|7|8|10|12)$/) {
            $tm[3] = 31;
         } elsif ($tm[4] =~ /^(4|6|9|11)$/) {
            $tm[3] = 30;

         # ein Schaltjahr ist ...
         # - wenn ein Jahr durch 4 teilbar ist
         # - aber nicht, wenn es durch 100 teilbar ist
         # - aber doch wieder, wenn es durch 400 teilbar ist

         } elsif (!($tm[5] % 400) || ($tm[5] % 100 && !($tm[5] % 4))) {
            $tm[3] = 29;
         } else {
            $tm[3] = 28;
         }
      }
   }


Das geht bestimmt auch leichter, aber so auch :)

Greez,
opi
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
renee
 2005-12-27 16:25
#61376 #61376
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@opi: Wenn Dich nur Tag, Monat, Jahr interessieren, dann wuerde ich auch nur damit arbeiten. Also:
Code: (dl )
my @tm  = (localtime)[3..5];
und dann im Folgenden natuerlich mit $tm[1] usw. arbeiten oder
Code: (dl )
my ($day,$month,$year)  = (localtime)[3..5];
. Das ist dann sprechender als mit $tm[$index]...
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/
bloonix
 2005-12-27 18:00
#61377 #61377
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hinzu kommt noch, dass dieses Codestück nur für
Zeitrechnungen bis 1582 brauchbar ist - wenn ich den
gregorianischen Zeitkalender richtig verstanden habe.

Edit:

Wenn du also Reports vor dieser Zeit haben solltest, dann
wäre schleunigst mal eine Aufräumaktion angebracht :)\n\n

<!--EDIT|opi|1135699641-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
Strat
 2005-12-28 14:34
#61378 #61378
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
nebenbei: localtime auf 32-bit-systemen geht nur von 1970-2038...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
[E|B]
 2005-12-28 14:38
#61379 #61379
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=opi,27.12.2005, 17:00]Hinzu kommt noch, dass dieses Codestück nur für
Zeitrechnungen bis 1582 brauchbar ist - wenn ich den
gregorianischen Zeitkalender richtig verstanden habe.[/quote]
Dem gregorianischen Kalender ist es egal wann er erfunden wurde. Ältere Daten können darauf selbstverständlich übertragen werden.
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
renee
 2005-12-28 15:12
#61380 #61380
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zum Thema 2038 gibt es gerade auch einen Thread auf perlmonks.org...
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/
esskar
 2005-12-28 15:24
#61381 #61381
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=renee,28.12.2005, 14:12]Zum Thema 2038 gibt es gerade auch einen Thread auf perlmonks.org...[/quote]
ich weiss ;)
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2005-12-27 09:24.