Schrift
[thread]6969[/thread]

Datumsfunktion: aktuelles Datum minus 3 Tage

Leser: 1


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
Glen
 2005-05-06 21:29
#54655 #54655
User since
2004-07-04
8 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,
mein Problem ist folgendes: Das aktuelle Datum auszugeben ist ja einfach, ich brauch aber das Datum von vor 3 Tagen. Kann mir da jemand vielleicht auf die Sprünge helfen? Das Datumsformat sollte dann so aussehen: 2005-06-05. Also Jahr, Tag, Monat. Einstellige Tage und Monate sollten noch eine 0 vorangestellt bekommen.

Danke schonmal für Eure Hilfe.

Gruß Glen
GwenDragon
 2005-05-06 21:50
#54656 #54656
User since
2005-01-17
14612 Artikel
Admin1
[Homepage]
user image
CPAN:Date-Manip kann Zeitdifferenzen berechnen und ausgeben.

Es geht aber auch so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/local/bin/perl 

use strict;
use warnings;

my $now = time();
my $before = $now - 3 * 24 * 3600; # drei Tage

# ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)
my @loc = localtime($before);

my $datebeforestring = sprintf( "%04d-%02d-%02d", $loc[5]+1900, $loc[4], $loc[3] );  

print $datebeforestring;

1;
\n\n

<!--EDIT|GwenDragon|1115402601-->
pq
 2005-05-06 22:18
#54657 #54657
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=GwenDragon,06.05.2005, 19:50]Es geht aber auch so:
Code: (dl )
my $before = $now - 3 * 24 * 3600; # drei Tage
[/quote]
vorsicht, vorsicht. das kann in die hose gehen, z.b.am 28. märz zwischen
0:00 und 1:00. nicht jeder tag hat 24 stunden. lieber das modul nehmen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
GwenDragon
 2005-05-06 22:33
#54658 #54658
User since
2005-01-17
14612 Artikel
Admin1
[Homepage]
user image
[quote=pq,06.05.2005, 20:18][quote=GwenDragon,06.05.2005, 19:50]Es geht aber auch so:
Code: (dl )
my $before = $now - 3 * 24 * 3600; # drei Tage
[/quote]
vorsicht, vorsicht. das kann in die hose gehen, z.b.am 28. märz zwischen
0:00 und 1:00. nicht jeder tag hat 24 stunden. lieber das modul nehmen.[/quote]
Ja, ein fertiges Modul umschifft auch Denkklippen ;)
Glen
 2005-05-06 22:44
#54659 #54659
User since
2004-07-04
8 Artikel
BenutzerIn
[default_avatar]
Ah ihr seit klasse.
Vielen Dank für die schnelle Hilfe.

Gruß Glen
Glen
 2005-05-07 19:22
#54660 #54660
User since
2004-07-04
8 Artikel
BenutzerIn
[default_avatar]
Leider hat das doch nicht so ganz gestimmt. Der Monat wurde falsch ausgegeben, nämlich immer 04 anstatt 05.
Ich habs jetzt eine andere Lösung gefunden:
Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/local/bin/perl

use strict;
use warnings;
use POSIX qw(strftime);

my $seit = strftime("%Y-%d-%m", (localtime(time - 86400 * 3)) );
print "$seit\n";


Gruß
Glen
Dubu
 2005-05-07 21:08
#54661 #54661
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Glen,07.05.2005, 17:22]Leider hat das doch nicht so ganz gestimmt. Der Monat wurde falsch ausgegeben, nämlich immer 04 anstatt 05.[/quote]
Stimmt. localtime() zaehlt die Monate von 0 bis 11 statt von 1 bis 12, daher muesste es im Code von GwenDragon oben $loc[4]+1 statt $loc[4] heissen.
pq
 2005-05-07 23:12
#54662 #54662
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Glen,07.05.2005, 17:22]Ich habs jetzt eine andere Lösung gefunden:
Code: (dl )
1
2
my $seit = strftime("%Y-%d-%m", (localtime(time - 86400 * 3)) );
print "$seit\n";
[/quote]
prima. jeder tag hat 24 stunden. und die sonne dreht sich um die erde.
und ich erbe dann mal irgendwann solchen code und muss dann
debuggen, wenn es bei der nächsten zeitumstellung kracht.

solang man das script per hand anstösst und an die zeitumstellung denkt,
kann man das ja benutzen, aber ansonsten nimm doch bitte ein modul.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pKai
 2005-05-08 04:00
#54663 #54663
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
[quote=pq,07.May.2005, 21:12]..., aber ansonsten nimm doch bitte ein modul.[/quote]
Aber vielleicht nicht so ein Monster wie Date::Manip, wo sogar der Autor meint, für die meisten Leute sei es nicht die richtige Lösung ;)

Hier eine Variante von Glens Code, die "zeitumstellungssicher" sein sollte:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/local/bin/perl

use strict;
use warnings;
use POSIX qw(strftime);

my $fmt = '%Y-%d-%m';
my $delta = -3*24*60*60; # -3 Tage
my $seit;

my $t = time();
my $d0 = strftime($fmt, localtime ($t)); # Tag (jetzt)
my $d12 = strftime($fmt, localtime ($t+12*60*60)); # Tag (jetzt+12h)
if ($d0 eq $d12) {
$seit = strftime ($fmt, localtime ($t+6*60*60+$delta));
} else {
$seit = strftime ($fmt, localtime ($t-6*60*60+$delta));
}
print $seit,$/;
\n\n

<!--EDIT|pKai|1115510605-->
I sense a soul in search of answers.
J-jayz-Z
 2005-05-08 14:50
#54664 #54664
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Jo, ist normal. localtime zählt zwar auch 12 Monate aber eben von 0-11.
Man kann ja auch nicht immer an alles denken. Ich zum beispiel habe dann immer
Code: (dl )
$month = $month + 1;

gemacht. Man kann ja aber auch nicht an alles denken :blush:
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2005-05-06 21:29.