|
10.01.2012 00:33:30 Uhr
|
#1
|
|
|
Ich hab nen Problem wo ich gerade nicht weiterkomme..
1. Ich habe Timestamp-werte in einer Variable aus der Vergangenheit.
2. Ich möchte zu diesem Wert 10 Jahre zuzählen.
3. Dann möchte ich diesen Wert mit dem aktuellen Datum vergleichen.
4. Diesen Wert möchte ich dann ausgeben mit "...noch Tage" |
|
|
|
10.01.2012 01:50:36 Uhr
|
#2
|
|
|
Moin moin,
ja ich kenne diese "Aufgaben" aus meiner Java- Vergangenheit nur zu gut... 
Ich werde mir das mal in Java noch einmal genau anschauen.
Btw, haben die Jahre durchgehend 365 Tage (Geschäftsjahr - Rechnung) oder sind Schaltjahre mit einbezogen?
zu 1)
Die Timestamps sollen nehme ich an per Stream eingelesen werden oder soll das manuell geschehen?
|
|
|
|
|
|
also die Timestamp werte kommen von mir aus der SQL DB
also rechnung sollte so in etwa aussehen
erstmal lese ich dann natürlich den aktuellen Timestamp ein mit
$current_date = mktime();
dann versuche ich eben
$difference = $entry_date(+10 Jahre) - $current_date;
Problem ist nur - wie rechne ich die 10 Jahre auf die Variable "$entry_date"
klar -das mit Schaltjahren ist ein Problem....
Nochmal genau zur Erklärung was berechnet werden soll...
Benutzer ist beigetreten am 15.02.2002
Benutzer ist 10 Jahre dabei am: 15.02.2012
Benutzer benötigt noch Tage bis zum 15.02.2012 (wenn ziel erreicht - "Ja" - wenn nicht - Anzahl der Tage ausgeben)
|
|
|
|
|
|
Ah so, gut, ich verstehe was Du meinst.
Ich werde mir dazu mal Gedanken machen und mal versuchen das in Pseudocode ausführlich zu lösen, da ich schätze, dass Dir Java-Code vermutlich nicht allzu sehr helfen wird...?
Auf gut Glück habe ich gerade einmal herum gegoogled und dabei das hier gefunden, ich hoffe das hilft Dir zusätzlich schon einmal (sofern Du es noch nicht kanntest, natürlich). Dabei geht es jedoch in erster Linie um Differenz in Minuten, so wie ich das im Überfliegen heraus gelesen habe.
Also so etwas hier:
|
SELECT
ROUND
(
TO_NUMBER
(
TO_DATE(TO_CHAR(SYSTIMESTAMP, 'DDMMYYYY:HH24:MI:SS'), 'DDMMYYYY:HH24:MI:SS')
-
TO_DATE(TO_CHAR(TO_TIMESTAMP('12052006:15:47:21','DDMMYYYY:HH24:MI:SS'), 'DDMMYYYY:HH24:MI:SS'), 'DDMMYYYY:HH24:MI:SS')
) * 24 * 60
) "DIFFERENCE IN MINUTES"
FROM DUAL; |
(http://www.dbforums.com/oracle/1216948-difference-between-timestamps.html#post4544554)
|
|
|
|
10.01.2012 03:04:05 Uhr
|
#5
|
|
|
Eventuell müsste sich hier auch etwas brauchbares finden lassen:
http://www.php-einfach.de/codeschnipsel_945.php
Umständlich gesprochen behandelst Du ja den 15.02.2002 in gewisser Weise als Tag Null.
Danach könnte man wie im Link beschrieben verfahren, dass man eine Funktion implementiert, die erst alles umrechnet auf die Sekunden, oder man nimmt das Schema d.m.Y. und addiert auf Y +10 . Anschließend, wie Du ja schon schriebst, würde ich das dann vom Zieldatum 15.02.2012 subtrahieren, zuerst die Tage voneinander, dann die Monate und anschließend die Jahre.
Oder denke ich gerade zu einfach?
Ich schlafe mal ne Nacht drüber, morgen finde ich hoffentlich etwas brauchbares.  |
|
|
|
10.01.2012 08:38:48 Uhr
|
#6
|
|
|
In welcher Programmiersprache denn? Mit PHP ist es recht einfach.
|
<?php
// 1. Timestamp Wert aus Vergangenheit (hier 4 Jahre in der Vergangenheit)
$past = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y") - 4);
// 2. Zähle zu dem Timestamp aus der Vergangenheit 10 Jahre dazu
$future = strtotime('+10 years',$past);
// 3. Ziehe vom Timestamp welches in der Zukunft liegt den heutigen Timestamp ab.
$difference = $future-mktime();
// 4. Teile den übrig gebliebenen Timestamp durch 86400 (60 Sek. * 60 Min * 24 Std. = 86400)
$difference_in_days = $difference / 86400;
?>
|
Eventuell musst Du die Tage am Schluss noch runden bzw. Du kannst dir ja damit dann auch anzeigen lassen (noch 1 Jahr, 4 Monate, 7 Tage, 4 Stunden und 34 Minuten) oder soetwas indem Du dir eine Funktion baust.
Gruß, Whiteknight |
|
|
|
10.01.2012 10:50:21 Uhr
|
#7
|
|
|
Danke Whiteknight. 
Wenn ich mir deinen Code da so anschaue, dann wäre ich vermutlich ganz schön ins Schwitzen gekommen (mangels Kenntnissen in PHP ^^ ). Aber wenn ich mir E4s Code-Beispiele dort oben anschaue
|
<?php
$current_date = mktime();
$difference = $entry_date(+10 Jahre) - $current_date;
$entry_date
?>
|
Dann glaube ich fast, dass Du den Nagel auf den Kopf getroffen hast.  |
|
|
|
|
|
Danke euch beiden - hatte echt nen Blackout ... hab am ganzen Projekt sicher schon zulange gesessen...
habe dafür nun eine kleine funktion..., klappt auch super....
Aufgerufen habe ich es mit:
|
<?php tenYearCount($userinfo['entry']) ?>
|
Und die Funktion:
|
<?php
function tenYearCount($past)
{
$future = strtotime('+10 years',$past);
$difference = $future - mktime();
$difference_in_days = floor($difference / 86400);
if(mktime() >= $future)
{
echo "User ist 10 Jahre dabei";
}
else
{
echo "10 Jahre in". $difference_in_days ." Tagen";
}
}
?>
|
|
|
|
|
11.01.2012 00:24:44 Uhr
|
#9
|
|
|
Wenn es nicht zuviele umstände macht - brauche ich die Variable $difference in diesem Format..
x Jahre x Monate x Tage |
|
|
|
11.01.2012 07:58:28 Uhr
|
#10
|
|
|
|
Wenn es nicht zuviele umstände macht - brauche ich die Variable $difference in diesem Format..
x Jahre x Monate x Tage |
Das kannst Du sicher selber, aber ich gebe dir einen Tipp.
Fang mit einer Do-While Schleife an und teile die Tage solange durch 365, bis die Restmenge kleiner 365 ist. Dann hast Du bei den Anzahl der Schleifendurchläufen die Jahre.
Die Restmenge teilst Du dann durch 30 Tage nach dem selben Prinzip, um die Monate zu ermitteln.
Was davon übrig bleibt sind dann die Tage.
Klar hat nicht jedes Jahr 365 Tage und nicht jeder Monat 30 Tage, aber das stört nicht weiter. |
|
|