Das Clanportal für OnlineGamer

Mit Timestamp auf Zukunftsdatum rechnen und vergleichen...



 



  |E4|
verfasst am 10.01.2012 00:33:30 Uhr    #1
Strandstürmer

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"
  [SD]Cobryn
verfasst am 10.01.2012 01:50:36 Uhr    #2
Shadowdragons

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?


  |E4|
verfasst am 10.01.2012 02:13:21 Uhr
- Beitrag 3-mal editiert. Zuletzt am 10.01.2012 02:21 Uhr von |E4|
   #3
Strandstürmer

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)
  [SD]Cobryn
verfasst am 10.01.2012 02:30:51 Uhr
- Beitrag 2-mal editiert. Zuletzt am 10.01.2012 02:40 Uhr von [SD]Cobryn
   #4
Shadowdragons

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:
Zitat:
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)

  [SD]Cobryn
verfasst am 10.01.2012 03:04:05 Uhr    #5
Shadowdragons

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.
  Whîtêkñîght
verfasst am 10.01.2012 08:38:48 Uhr    #6
Das Schwarze Auge

In welcher Programmiersprache denn? Mit PHP ist es recht einfach.

PHP-Code:
<?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
  [SD]Cobryn
verfasst am 10.01.2012 10:50:21 Uhr    #7
Shadowdragons

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-Code:
<?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.
  |E4|
verfasst am 10.01.2012 20:05:02 Uhr
- Beitrag 2-mal editiert. Zuletzt am 10.01.2012 21:17 Uhr von |E4|
   #8
Strandstürmer

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-Code:
<?php tenYearCount($userinfo['entry']) ?>

Und die Funktion:
PHP-Code:
<?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";
                    }
        }
?>
  |E4|
verfasst am 11.01.2012 00:24:44 Uhr    #9
Strandstürmer

Wenn es nicht zuviele umstände macht - brauche ich die Variable $difference in diesem Format..


x Jahre x Monate x Tage
  Whîtêkñîght
verfasst am 11.01.2012 07:58:28 Uhr    #10

Zitat von |E4| am 11.01.2012 um 00:24 Uhr:
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.

Nickname:
   
 
Beitrag:
Secure ID: Bitte gib den folgenden Sicherheits-Code ein
  Neues Captcha anfordern

Hinweis: Durch Absenden eines Beitrags stimmst Du unseren Nutzungsbestimmungen zu!

    

[Zurück]


Seite generiert in 0.03 Sekunden   

 
 

Anmelden


 
 

Clanauswahl


 
 

Statistik


 
 

Sonstiges