Beziehungs "Counter"

BjoeHrn

Grünschnabel
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
 
Das ganze geht mit Timestamps ... nennt sich auch Countdown -.-
Sieht dann in etwa so aus

PHP:
<?
// Meint geburtstag
// stichtag 1.07.2007 als Unixtime erzeugen
$newDate = mktime(0,0,0, 7, 1, 2007);
// 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>";
?>
 
Hallo!
Das ganze geht mit Timestamps ... nennt sich auch Countdown -.-
Sieht dann in etwa so aus

PHP:
<?
// Meint geburtstag
// stichtag 1.07.2007 als Unixtime erzeugen
$newDate = mktime(0,0,0, 7, 1, 2007);
// 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:
<?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
 
Zuletzt bearbeitet:
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 ^^
 
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:
<?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
 
Zuletzt bearbeitet:
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
 
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:
<?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:
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
 
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
 
Zurück