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

Datum vergleichen: Datum vergleichen

Leser: 1


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Gast Gast
 2003-09-10 16:40
#50021 #50021
Ich möchte ein Datum vergleichen. Der eine Wert wird aus einem HTML Dokum. über Javascript im Format TT.MM.YYYY erfaßt und übertragen. Der Vergleichswert wird aus einer Textdatenbank ermittelt. Ich möchte wissen ob der im HTML Formular eigegebene Datumwert innerhalb der Vergleichswerte liegt. Eigentlich dachte ich, daß es nicht so schwer sein könnte aber das Ergebnis des Vgl. ist falsch. Ich habe auch schon versucht das Datum in Millisekunden umzurechnen auch das hat nicht so funktioniert. Was mache ich falsch oder wie kann ich es anders machen?

Mein Vergleich:
if (Vgl_dat1 <= Vorg_dat && Vorg_dat <= Vgl_dat2) .....j_scheel@web.de
pq
 2003-09-10 17:07
#50022 #50022
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
du solltest das datum mittels dem modul Time::Local zuerst in epoch-sekunden
umwandeln, bevor du vergleichst. ansonsten vergleichst du z.B.:
"12.03.2003" < "11.04.2003"
das liefert falsch, da 12 > 11.
ausserdem bitte immer mit warnings entwickeln, dann hätte dir perl gesagt:
Argument "12.03.2003" isn't numeric in numeric lt (<) at ...\n\n

<!--EDIT|pq|1063199302-->
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
renee
 2003-09-10 17:11
#50023 #50023
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Welches Format hat denn das Datum aus der Datenbank?? Das gleiche??

Dann mach das mal so (ungetestet):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
my $date = "12.12.2003";
my $date_db = "13.12.2003";
my ($day_1,$month_1,$year_1) = split(/\./,$date);
my $date_1 = $year_1.$month_1.$day_1;
my ($day_2,$month_2,$year_2) = split(/\./,$date_db);
my $date_2 = $year_2.$month_2.$day_2;
if($date_2 != $date_1){
print "ungleich!\n";
}
else{
print "gleich!\n";
}
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/
format_c
 2003-09-10 17:11
#50024 #50024
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Hi.

Es geht am besten das Datum mittels timelocal in Epochensekunden umzurechnen weil sich damit am besten rechnen lässt.
Damit kannst du dann deine Vergleiche anstellen
perldoc Time::Local

Gruß Alex
Robby
 2003-09-10 17:11
#50025 #50025
User since
2003-08-11
409 Artikel
BenutzerIn
[default_avatar]
Edit: Es war einer schneller *heul*\n\n

<!--EDIT|Robby|1063199567-->
Kaum macht man es richtig - schon funktioniert es!
format_c
 2003-09-10 17:19
#50026 #50026
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=renee,10.09.2003, 15:11]Welches Format hat denn das Datum aus der Datenbank?? Das gleiche??

Dann mach das mal so (ungetestet):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
my $date = "12.12.2003";
my $date_db = "13.12.2003";
my ($day_1,$month_1,$year_1) = split(/\./,$date);
my $date_1 = $year_1.$month_1.$day_1;
my ($day_2,$month_2,$year_2) = split(/\./,$date_db);
my $date_2 = $year_2.$month_2.$day_2;
if($date_2 != $date_1){
 print "ungleich!\n";
}
else{
 print "gleich!\n";
}
[/quote]
Um festzustellen ob die strings gleich oder ungleich sind brauchst du die umkehrung von Jahr monat und Tag nicht machen.
Aber ich zeig dir wie in einer Anweisung geht:
Code (perl): (dl )
my $date1 = join ".", reverse split /\./,$date;


Ist weniger Speicherintensiv. Nur so am Rande.

Gruß Alex
renee
 2003-09-10 17:24
#50027 #50027
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ja, aber ich weiß ja nicht, wie erfahren heinz in Perl ist. Für uns ist deine Version genauso gut lesbar wie meine, aber für Anfänger könnte meine Version leichter zum Nachvollziehen sein...

Aber ich würde nich join ".", sondern join "" machen...
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/
format_c
 2003-09-10 17:26
#50028 #50028
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=renee,10.09.2003, 15:24]...
Aber ich würde nich join ".", sondern join "" machen...[/quote]
Oh übersehen.

Sorry.
Edit3: Edit1 und Edit2 gelöscht weil die so schwachsinnig waren. Bin heute net so ganz auf der Höhe.\n\n

<!--EDIT|format_c|1063200887-->
Crian
 2003-09-11 14:00
#50029 #50029
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Ob man nix, einen Punkt oder 'HUHU' dazwischenschreibt, ist für den Vergleich völlig egal :-)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
pq
 2003-09-11 14:21
#50030 #50030
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Crian,11.09.2003, 12:00]Ob man nix, einen Punkt oder 'HUHU' dazwischenschreibt, ist für den Vergleich völlig egal :-)[/quote]
nicht ganz. für alles, was keine zahl ist, wird dich perl mit einer warnung
bestrafen, dass der wert nicht numerisch sei. =)
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
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2003-09-10 16:40.