PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Monatsabfrage??



Maruu
07-09-2002, 18:14
Hallo!

Ich will eins script erstellen das mir automatisch überwacht wieviel ich von meinen 90 Stunden im Monat (Ich hab den 90 Stunden Tarief der Deutschen Telekom) ich schon versurft hab und wieviel ich nochübrig hab. Ich hab schon eine Stoppuhr gebaut die immer die Aktuelle Zeit in Sekunden in eine Datei schreibt und die ich dann nur auslesen muss. Mein Problem ist nun noch wie kann ich es rausfinden wieviele Tage der Monatnoch hat oder wieviele er insgesammt hat?? Ich arbeite mit Linux Suse 7.3 Evt mit Date oder ähnlichem??

MFG

Maruu

anda_skoa
07-09-2002, 18:26
Wahrscheinlich gibt es eine einfacher Lösung, aber mal als Anfang



case $(date +%m) in
2) DAYS=28 ;;
4) DAYS=30 ;;
6) DAYS=30 ;;
9) DAYS=30 ;;
11) DAYS=30 ;;
*) DAYS=31 ;;
esac


Bei Februar müßte man noch Schaltjahre berücksichtigen.

Ciao,
_

Maruu
07-09-2002, 18:52
hy ja sowas hab ich mir auch schon überlegtr aber was ist in Schaltjahren usw da muss ich so viel schrieben oder es ändern usw. Vielleicht weiß ja jemand ne einfachere Lösung.

MFG

Maruu

fork
07-09-2002, 19:21
http://www.rpmfind.net/linux/rpm2html/search.php?query=monopoly

anda_skoa
07-09-2002, 19:36
man könnte im case für 2 folgendes machen



2) DATE=$(date +%Y)-02-29
if [ $(date --date=$DATE +%d) -eq 29 ]; then DAYS=29; else DAYS=28; fi
;;


Wenn es nämlich kein Schaltjahr ist, dann wird zB bei date --date=2002-02-29 als Datum der 1. März angezeigt.

Ciao,
_

tomes
07-09-2002, 20:04
mehr mit Perl beschaeftige, hier ein Vorschlag von mir:

-----snip-----
#!/usr/bin/perl
use warnings;
use strict;
use Date::Calc qw (:all);

my ( $day, $month, $year, $days, $wieviel);

my ($y, $m, $md) = (localtime(time))[5,4,3];
$day = sprintf "%02d", $md;
$month = sprintf "%02d", $m+1;
$year = sprintf "%d", 1900+$y;
$days = Days_in_Month($year,$month);
$wieviel = $days - $day;
print "Es sind noch ",$wieviel," Tage bis zum Monatsende\n";
-----snap-----

Zeigt zum Schluss an, wieviel Tage der Monat noch hat ;-)

T;o)Mes

P.S.:
Geht bestimmt noch einfacherer, aber ich fange ja gerade erst an mit Perl.
z.B kann man ja alles in einer Zeile deklarieren ;)

Maruu
08-09-2002, 15:18
werds wohl mit case machen falls mir nix besseres einfällt

Trotzdem Danke

MFG

Maruu

Maruu
08-09-2002, 20:17
@anda_skoa

Hab das von dir mit dem Schaltjahr mal ausprobiert es geht aber ich versteh ned ganz wies funktioniert kannst dus mal genau kommentieren??

Wäre echt nett

MFG

Maruu

anda_skoa
08-09-2002, 22:19
2) DATE=$(date +%Y)-02-29
if [ $(date --date=$DATE +%d) -eq 29 ]; then DAYS=29; else DAYS=28; fi
;;


Zuerst wird ein String erzeugt, der aus dem aktuellen Jahr und -02-29 besteht. Also 29. Februar des aktuellen Jahres.
date --date=$DATE sagt date, dass es den String von $DATE als Datum nehmen solll.
Es wird praktisch temporär das Datum auf 29. Feb das aktuellen Jahres gesetzt.

Wenn das Jahr kein Schaltjar ist, so wie heuer, dann gibt date als Datum den 1. März aus.
(Einfach mal date --date=2002-02-29 probieren)

Das +%d weißt date an, das vom Datum nur den Tag auszugeben.
Wenn es ein Schaltjahr ist, dann konnte date das Datum 29.2 benutzen, der ausgegeben Tag ist also 29.
Bei normalen jahren wird, wie oben beschrieben, der 1. März gesetzt, der ausgegeben tag ist also 1.

Mit -eq 29 wird abgefragt ob der ausgegeben Tag 29 ist.
Man könnte natürlich zB auch -eq 1 schreiben und bei then DAYS=28 und bei else DAYS=29 schreiben.

hth,
_

Maruu
09-09-2002, 20:27
Danke habs kapiert Super Service echt.

MFG

Maruu