[PHP] Datum und Sekunden addieren

SHViperia

Member
4 November 2006
12
0
Servus,

ich habe eine mySQL Datenbank mit folgendem Inhalt
-----------------------------------------------------
Tabellenstruktur für Tabelle buildings
Feld Typ Null Standard
BuildID int(11) Ja NULL
BuildName varchar(30) Ja
bild text Ja
BuildDes text Ja
BuildTime datetime Ja 0000-00-00 00:00:00
nm int(11) Ja 0
nk int(11) Ja 0
nd int(11) Ja 0
ne int(11) Ja 0
------------------------------------------------------

Nehmen wir mal an, ich habe jetzt 3 Gebäude mit unterschiedlichen BuildTime-Werten.

(Jahr-Monat-Tag Stunden:Minuten:Sekunden)
---------------------------
Gebäude 1 = 0000-00-00 00:02:30
Gebäude 2 = 0000-00-00 00:03:00
Gebäude 3 = 0000-00-00 00:14:45
----------------------------

Nun möchte ich, das die oben abgebildete jeweils zur aktuellen Zeit hinzu addiert wird.

Es jetzt 2006-11-04-16:11:00, Gebäude 1 wäre also 2006-11-04-16:13:30 fertig.

in meiner php-datei sieht das so aus:

PHP:
$now = date("Y-m-d H:i:s");
$fertig = ($now+$row[BuildTime]);
print "$fertig";

es wird aber als ergebnis nur das Jahr 2006 angezeigt.
...ich möchte aber das komplette Datum.

Wie geht das?
 
Zuletzt bearbeitet:
Rechne halt mit Timestamps. Die kannst du einfach mit Sekunden addieren.
z.B.:
PHP:
$now=time();
$build_time=2*60+30; // 2'30'' bis fertig
$building_ready_at=$now+$build_time;

echo date("r",$building_ready_at);
 
Habe gerade beim 'Vorschau' klicken gesehen das theHacker schneller war ;)
Vllt kannst du trotzdem diesen Code brauchen, hier wird dein BuildTime in einem Timestamp mitumgerechnet
PHP:
$row["BuildTime"] = explode(" ", $row["BuildTime"]);  //BuildTime in Datum und Zeit aufsplitten
$date = explode("-", $row["BuildTime"][0]);  //Datum aufsplitten
$time = explode(":", $row["BuildTime"][1]);  //Zeit aufsplitten

$buildtime = mktime( $time[0],  $time[1], $time[2], $date[1], $date[2], $date[0] );  //Timestamp berechnen

$newdate = time() + $buildtime;  //Endzeit berechnen [ time() gibt den aktuellen Timestamp aus ]

echo date("r", $newdate);  //Datum ausgeben


Ich habe es nicht getestet, dürfte aber richtig sein!
 
sehr schön, klappt wunderbar.

Nun aber noch ein Problem.

Die Werte in der Datenbank bei BuildTime sind ja jetzt Sekunden.
Also 150 Sekunden zum Beispiel...für eine Bauzeit von 00:02:30.

Jetzt wird aber dann in der geparsten php die Zeit in Sekunden auch angezeigt.

Ich möchte aber, dass die Zeit im Format 00:00:00 angezeigt wird.
Ich kann mir vorstellen, dass dies mit entsprechender Datenbankabfrage, als auch mit entsprechnder Formel im php geht.

Aber welche Methode wendet man besten an?
Und wie sieht die dann aus?
 
Habe gerade beim 'Vorschau' klicken gesehen das theHacker schneller war ;)
Vllt kannst du trotzdem diesen Code brauchen, hier wird dein BuildTime in einem Timestamp mitumgerechnet
PHP:
$row["BuildTime"] = explode(" ", $row["BuildTime"]);  //BuildTime in Datum und Zeit aufsplitten
$date = explode("-", $row["BuildTime"][0]);  //Datum aufsplitten
$time = explode(":", $row["BuildTime"][1]);  //Zeit aufsplitten

$buildtime = mktime( $time[0],  $time[1], $time[2], $date[1], $date[2], $date[0] );  //Timestamp berechnen

$newdate = time() + $buildtime;  //Endzeit berechnen [ time() gibt den aktuellen Timestamp aus ]

echo date("r", $newdate);  //Datum ausgeben
Ich habe es nicht getestet, dürfte aber richtig sein!

Jo, geht auch wunderbar.

Jedoch zeigt der nun bei Produktionszeit "array" an.
https://www.webmasters-ressource.de/prod.jpg
** Bild verlinkt ** edit by theHacker

Die Bilder habe ich aus OGame übernommen. Sie dienen lediglich als Platzhalter und werden später durch eigene ersetzt.
 
Hmm..
Keine Ahung warum der Array anzeigt.. Eigenticlh dürfte das kein Array sein

Ersetzt mal
PHP:
echo date("r", $newdate);  //Datum ausgeben
durch
PHP:
echo date("d.m.Y - H:i:s", $newdate);  //Datum ausgeben

Nun wäre die Ausgabe: TAG.MONAT.JAHR - STUNDE.MINUTE.SEKUNDE
 
Sorry, aber wenn ich SOWAS seh wird mir wirklich schlecht:

PHP:
$row["BuildTime"] = explode(" ", $row["BuildTime"]);  //BuildTime in Datum und Zeit aufsplitten
$date = explode("-", $row["BuildTime"][0]);  //Datum aufsplitten
$time = explode(":", $row["BuildTime"][1]);  //Zeit aufsplitten

$buildtime = mktime( $time[0],  $time[1], $time[2], $date[1], $date[2], $date[0] );  //Timestamp berechnen

Es gibt nicht ohne Grund Date & Time Funktionen bei MySQL:

Code:
Select UNIX_TIMESTAMP(`BuildTime`) as Unix_BuildTime FROM .....

UNIX_TIMESTAMP liefert nen (wie der Name schon sagt) nen Unix Timestamp zurueck, wenn man ihm ein DATE oder DATETIME als Parameter gibt.

:arrow: Date and Time functions
 
Willst du ein Komplettes Browsergame mit den PHP Kenntnissen Programmieren?
Vll solltest du dich erstmal an etwas kleinerem versuche ;)

zu deinem Problem: Speicher die Zeiten gleich alle in Sekunden ab (timestamps) dann musst du nicht immer umrechnen.
 
Jo, danke euch erstmal allen für die guten Tipps. Klappen alle Varianten wunderbar ^^

Ja, ich habe vor ein Browsergame zu machen.

Aber vielmehr zum privaten Nutzen um damit PHP zu lernen ;)
(Habe gerade ein 18 monatiges Studium zum Webmaster begonnen....leider kommt PHP aber erst in den letzten Monaten dran. Daher dachte ich mir, ich probier schonmal ein bisschen was aus)

Nebenfrage:

Ist es immer so, dass PHP verschiedene ...öhm..."Typen" nicht richtig berechnen kann? ....ich meine....dass man Kg und MB nicht gut zusammenrechnen kann ist mir schon irgendwo klar....aber Zeitangabe und Datumsangabe.....hmmm..... :-?


....so ne Art "Universalformel" gibts da nicht, oder?! :ugly:

(Apfel+Birne=Obst, Auto+Fahrrad=Transportmittel, Mann+Frau=:mrgreen:)
 
Das Problem umschifft man idr, indem man fuer Zeitangaben generell Unix-Timestamps verwendet. Dann rechnet man einfach mit den Sekunden herum - zumal die PHP-Zeit/Datumsfunktionen immer Unixtimestamps als Eingabe/Ausgabe verwenden.

Das ist alles nur eine Frage der Betrachtung - du hast ja auch hier gesehen, dass man mit den DATE und DATETIME Angaben direkt in MySQL auch rechnen kann, nur wenn man diese in PHP weiterverarbeiten will, muss man sie in ein "guenstiges" Format umrechnen.

Um deine Frage zu beantworten: Eine "Universalformel" gibts nicht, aber andere Repraesentationen der Daten - die fuer manche Sachen guenstiger sind - gibts.