tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
989
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    BjoeHrn BjoeHrn ist offline Grünschnabel
    Registriert seit
    Mar 2007
    Beiträge
    4
    Guten Morgen!

    Hab mir die ganze Nacht meinen Kopf zerbrochen und bin zu keiner Lösung gekommen.
    Im Moment nutze ich einen Beziehungs "Counter der einen Monat mit 28 Tagen rechnet - das ist auf dem Mist meiner Freundin gewachsen .
    Da ist es ja nun recht leicht die Jubiläen zu bestimmen.

    Beziehungsstart + 28 Tage = Neues Jubiläum (= 1. Monat)

    Nun wollte ich aber einen schreiben der die Monate richtig zählt also:
    25.12.05 - 25.1.06 = 1 Monat

    Wie man es also normal zählen würde.

    Aber wie kann ich sowas mit PHP realisieren? Den gesamt Zeitraum der Beziehung zu errechnen ist ja kein Ding. Das Ergebnis in Tage umwandeln und durch 30 teilen dann hätte man die Monate.

    Aber wie bestimme ich die unterbleibende Tage bis zum jeweiligen nächsten 25.?
    Sprich "Es bleiben noch 3 Tage bis zum 25.4.07".

    Kann mir irgendjemand etwas helfen? Ich hab im Moment echt keine Ahnung wie ich das anstellen soll.

    Vielen, vielen Dank im Voraus!

    Gruß,
    Björn
     

  2. #2
    -GS-Master -GS-Master ist offline Mitglied Platin
    Registriert seit
    Sep 2005
    Beiträge
    705
    Das ganze geht mit Timestamps ... nennt sich auch Countdown -.-
    Sieht dann in etwa so aus

    PHP-Code:
    <?
    // Meint geburtstag
    // stichtag 1.07.2007 als Unixtime erzeugen
    $newDate mktime(0,0,0712007);
    // aktuelle Zeit im Unixformat erzeugen
    $actDate time();
    // Differenz berechnen (in Sekunden)
    $diffDate = ($newDate-$actDate);

    // Anzahl Tage = Sekunden /24/60/60
    // floor() liefert nur den Anteil vor dem Komma
    $days floor($diffDate 24 60 60 );
    // den verbleibenden Rest berechnen = Stunden
    $diffDate $diffDate - ($days*24*60*60);
    // den Stundenanteil herausrechnen
    $hours floor($diffDate 60 60);
    $diffDate = ($diffDate - ($hours*60*60));
    // den Minutenanteil
    $minutes floor($diffDate/60);
    $diffDate $diffDate - ($minutes*60);
    // die verbleibenden Sekunden
    $seconds floor($diffDate);

    // und das ganze dann Anzeigen:
    echo "Noch: $days Tage, $hours Stunden, $minutes Minuten und $seconds Sekunden<br>";
    ?>
     

  3. #3
    Avatar von split
    split split ist offline Mitglied Platin
    Registriert seit
    Jan 2004
    Ort
    München
    Beiträge
    574
    Hallo!
    Zitat Zitat von -GS-Master Beitrag anzeigen
    Das ganze geht mit Timestamps ... nennt sich auch Countdown -.-
    Sieht dann in etwa so aus

    PHP-Code:
    <?
    // Meint geburtstag
    // stichtag 1.07.2007 als Unixtime erzeugen
    $newDate mktime(0,0,0712007);
    // aktuelle Zeit im Unixformat erzeugen
    $actDate time();
    // Differenz berechnen (in Sekunden)
    $diffDate = ($newDate-$actDate);

    // Anzahl Tage = Sekunden /24/60/60
    // floor() liefert nur den Anteil vor dem Komma
    $days floor($diffDate 24 60 60 );
    // den verbleibenden Rest berechnen = Stunden
    $diffDate $diffDate - ($days*24*60*60);
    // den Stundenanteil herausrechnen
    $hours floor($diffDate 60 60);
    $diffDate = ($diffDate - ($hours*60*60));
    // den Minutenanteil
    $minutes floor($diffDate/60);
    $diffDate $diffDate - ($minutes*60);
    // die verbleibenden Sekunden
    $seconds floor($diffDate);

    // und das ganze dann Anzeigen:
    echo "Noch: $days Tage, $hours Stunden, $minutes Minuten und $seconds Sekunden<br>";
    ?>
    Das würde so nicht funktionieren...

    1) Du gibst das nächste Datum fest im Quellcode an, aber genau dieses soll ja berechnet werden
    2) Daraus ergibt sich auch, dass das Script nur funktioniert, bis das Datum vorbei ist - danach wird logischerweise ein negativer Wert ausgegeben, anstatt die Zeit zum nächsten Stichtag...
    3) Soweit ich es verstanden habe, soll der "Beziehungs-Counter" zum 25. jeden Monats rechnen...

    Versuch's mal damit:
    PHP-Code:
    <?php
        
        error_reporting
    (E_ALL);
        
        
    $calcToDay 25// 25. des Monats

        
    $today = (int)date("d");
        if(
    $today == $calcToDay) {
            echo 
    "Heute ist Jubiläum :-)";
        } else if(
    $today $calcToDay) {
            echo 
    "Noch " . ($calcToDay $today) . " Tag(e) bis zum " $calcToDay date(".m.Y");
        } else {
            
    $nxtTs time() + 60 60 24 * ($calcToDay + ((int)date("t") - $today));
            echo 
    "Noch " . ((int)date("t") - $today $calcToDay) . " Tag(e) bis zum " date("d.m.Y"$nxtTs);
        }

    ?>
    Ausgabe heute: Noch 26 Tag(e) bis zum 25.04.2007

    Funktioniert auch bei Jahreswechsel...

    Gruß
    split
    Geändert von split (30.03.07 um 15:02 Uhr)
     
    Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut

  4. #4
    -GS-Master -GS-Master ist offline Mitglied Platin
    Registriert seit
    Sep 2005
    Beiträge
    705
    Aber wie kann ich sowas mit PHP realisieren? Den gesamt Zeitraum der Beziehung zu errechnen ist ja kein Ding. Das Ergebnis in Tage umwandeln und durch 30 teilen dann hätte man die Monate.

    Aber wie bestimme ich die unterbleibende Tage bis zum jeweiligen nächsten 25.?
    Sprich "Es bleiben noch 3 Tage bis zum 25.4.07".
    Genau genommen stimmt es nur so halb wie du es schreibst -.-
    Ok er berechnet nur zum gegebenen Tag -.- ist aber nicht besonders schwer sich dazu dann selbst noch etwas gedanken zu machen. Er müsste nur prüfen ob schon der 25.. ist also irgend ein Datum. Trifft das zu dann immer vom nächsten Monat ausgehen, bis man es berechnen kann
    Dann würde er auf sein ergebnis kommen ...

    Wollte nur ein Beispiel zeigen und nicht immer den ganzen Code übernehmen -.- habe diesen eben gerade aufm Desktop gehabt
     

  5. #5
    BjoeHrn BjoeHrn ist offline Grünschnabel
    Registriert seit
    Mar 2007
    Beiträge
    4
    Hey!

    Vielen vielen Dank für Eure Antworten!
    Hab mich ein großes Stück weiter gebracht.
    Kann vllt. jemand über mein Script schauen, ob ich das mit dem Umrechnen usw. alles richtig habe? Weil am 25.4 zeigt mir das Script "Zusammen seit 487 Tagen (= 1 Jahr, 4 Monate, 0 Wochen, 2 Tage)" an, müsste eigenlich passen bin mir aber nicht sicher :-/.

    Wäre ganz toll, wenn mal jemand drüber schauen könnte !

    PHP-Code:
    <?php
    require("./function.inc.php"); // Funktionen einladen

    $now time(); # Unix Timestamp
    $start mktime(0,0,0,12,25,2005); # Sekunden seit Unix bis zum 25.12.2005 
    $beziehung $now $start + (24*60*60); # Beziehungszeitraum in Sekunden

    $zeitraum convert_sec($beziehung);
    $beziehungs_tage floor($beziehung / (60 60 24)); # Beziehung in Tagen 

    echo "Zusammen seit <b>" $beziehungs_tage ." Tagen</b> (= ".$zeitraum['jahre'] .", ".$zeitraum['monate'].", ".$zeitraum['wochen'].", ".$zeitraum['tage'].")<br><br>";


    $calcToDay 25// 25. des Monats

    $today = (int)date("d");

    $foo "30.437";
    $monate round($beziehungs_tage $foo);
    $n_monate $monate +1;

    if(
    $today == $calcToDay) {
        echo 
    "Heute ist Jubiläum :-) Wir sind ".$monate." Monate zusammen!";
        } 
    else if(
    $today $calcToDay) {
        echo 
    "Noch " . ($calcToDay $today) . " Tag(e) bis zum " $calcToDay date(".m.Y");
        echo 
    " Dann sind wir ".$n_monate." Monate zusammen.";
        
        } 
    else {
        
    $nxtTs time() + 60 60 24 * ($calcToDay + ((int)date("t") - $today));
        echo 
    "Noch " . ((int)date("t") - $today $calcToDay) . " Tag(e) bis zum " date("d.m.Y"$nxtTs);
        echo 
    " Dann sind wir ".$n_monate." Monate zusammen.";
        }

    ?>
    In der function.inc.php werden die Sekunden umgerechnet in Jahr (365 Tage), Monate (30,437 Tage) usw.

    Schönen Abend noch!

    Gruß,
    Björn
    Geändert von BjoeHrn (06.04.07 um 23:18 Uhr) Grund: PHP Tags gesetzt
     

  6. #6
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo,

    ich hatte vor einiger Zeit mal eine Routine zur Darstellung von Zeitdifferenzen reingestellt. Vielleicht kannst du diese ja verwenden.

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  7. #7
    BjoeHrn BjoeHrn ist offline Grünschnabel
    Registriert seit
    Mar 2007
    Beiträge
    4
    Zitat Zitat von Matthias Reitinger Beitrag anzeigen
    Hallo,

    ich hatte vor einiger Zeit mal eine Routine zur Darstellung von Zeitdifferenzen reingestellt. Vielleicht kannst du diese ja verwenden.

    Grüße,
    Matthias
    Wow! Dein Script ist genial. Hätte nicht gedacht, dass man das so genau ausrechnen kann! Kommt ja doch etwas anderes raus als bei meiner Berechnung ! Werd das auf jeden Fall einfügen!
    Nur Differenzen wird es ja weiterhin geben, wenn man vom 25.3 bis zum 25.4 einen Monat hat kommt es ja nie genau auf "1 Jahr und 4 Monate".

    Gruß,
    Björn
     

  8. #8
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Zitat Zitat von BjoeHrn Beitrag anzeigen
    Nur Differenzen wird es ja weiterhin geben, wenn man vom 25.3 bis zum 25.4 einen Monat hat kommt es ja nie genau auf "1 Jahr und 4 Monate".
    Wieso nicht? Wenn man die Funktionen aus dem verlinkten Beitrag voraussetzt und folgenden Code ausführt:
    PHP-Code:
    <?php

    $start 
    = array(
        
    'Y' => 2005'M' => 12'D' => 7,
        
    'h' => 0'm' => 0's' => 0
    );

    $end = array(
        
    'Y' => 2007'M' => 4'D' => 7,
        
    'h' => 0'm' => 0's' => 0
    );

    $diff timediff($start$end);

    print_r($diff);

    ?>
    …dann ergibt das auf meinem System diese Ausgabe:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    Array
    (
        [Y] => 1
        [M] => 4
        [D] => 0
        [h] => 0
        [m] => 0
        [s] => 0
        [w] => 0
    )
    Also genau ein Jahr und vier Monate.

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  9. #9
    BjoeHrn BjoeHrn ist offline Grünschnabel
    Registriert seit
    Mar 2007
    Beiträge
    4
    Du hast vollkommen recht! Bin wohl etwas neben der Spur. Genial
    Nun kann ich mein Script perfekt vollenden *g*.

    Vielen vielen, dank für deine Routine!

    Gruß & gute Nacht,
    Björn
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 25.08.10, 19:13
  2. Eingabe in der timeline: "time*100" - bei Effekt "turbulentes Versetzen"-"Evolution"
    Von MTMonline im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 2
    Letzter Beitrag: 25.04.08, 09:49
  3. Finder methods + JBoss + Was expecting one of: "CONCAT" "SUBSTRING" ... "(" ... <STRI
    Von cengizhdde im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 6
    Letzter Beitrag: 27.05.05, 15:29
  4. Antworten: 2
    Letzter Beitrag: 19.05.05, 19:51
  5. PHP Counter - "logfile is missing"
    Von savvo im Forum PHP
    Antworten: 2
    Letzter Beitrag: 26.02.05, 00:27