Datediff Datumsdifferenz
Gottlieb
- datenbank
0 Snafu0 gottlieb0 Snafu0 dedlfix
1 Frank (no reg)
Liebe Grüße,
ich würde gerne wie bei Ebay von einer Spalte die Restzeit in (2T 21Std. 00Min) auslesen. Habe in der MySQL Dokumentation nur Datediff gefunden. DATEDIFF (Datum1, Datum2)
Wende ich dies an:
Datediff (now(), Datumspalte) erhalte ich folgende Fehlermeldung: FUNCTION Tabelle.DATEDIFF does not exist
Die Datumspalte ist zurzeit Datetime, welches ich aber ohne Probleme noch ändern kann.
Laut der Doku würde Datediff auch nur die Differenz in Tagen ausgeben und nicht inm Tage, Stunden und Min.
Wäre das überhaupt mit MySql > 5.0.1x lösbar?
Grüße
MySQL selbst wüsst ich jetzt nichts.
Ich würde einfach die Zeit in Sekunden auslesen bzw. umrechnen und dann anhand der Differenz Sekunden, Minuten, Stunden, Tage bis zu deiner "obersten Einheit" ausrechnen.
Sekunden = differenz % 60
Minuten = differenz / 60 % 60
...
Danke Frank und Snafu,
ich wusste nicht, dass es SELECT TIME_TO_SEC gibt, deshalb konnte ich nicht danach googlen.
Also mit TIME_TO_SEC habe ich die Gesamten Minuten bis zu der Spalte.
Bsp: 10704615 Sekunden
Ich darf jetzt keine Rundungsfehler oder sonstiges machen: Programmiersprache Java.
long differenz=10704615;
tage=differenz/86400;
(Ich hoffe er rundet ab)
stunden= differenz/3600;
(Ich hoffe er rundet ab)
minuten= differenz / 60 % 60;
sekunden= differenz % 60;
out.write="Noch: "+tage+" Tage "+stunden+" Stunden "+minuten+" Minuten und "+sekunden+" Sekunden";
Grüße
Sekunden = differenz % 60
Minuten = differenz / 60 % 60
...
Hallo!
long differenz=10704615;
tage=differenz/86400;
(Ich hoffe er rundet ab)
stunden= differenz/3600;
(Ich hoffe er rundet ab)
minuten= differenz / 60 % 60;
sekunden= differenz % 60;
Wenn du nicht float oder double verwendest dann wird soviel ich weiß der Nachkommateil einfach abgeschnitten, er rundet also quasi ab.
Naja, so ganz stimmt das was du geschrieben hast nicht.
Wenn noch 1 Tag und 2 Stunden verbleiben willst du ja nicht "noch 1 Tag 26 Stunden" dastehen haben.
Ich fange immer von unten an, dann ist es "übersichtlicher".
sekunden = diff % 60
minuten = diff / 60 % 60
stunden = diff / 60 / 60 % 24 (gleichbedeutend mit diff / 3600 % 24)
tage = diff / 60 / 60 / 24 (und evtl noch % 7 wenn du wochen auch willst)
out.write="Noch: "+tage+" Tage "+stunden+" Stunden "+minuten+" Minuten und "+sekunden+" Sekunden";
Prüf mit ein paar bestimmten Werten ob das richtige Ergebnis rauskommt.
Sollte aber eigtl passen.
Hi, »» »» long differenz=10704615;
Wenn du nicht float oder double verwendest dann wird soviel ich weiß der Nachkommateil einfach abgeschnitten, er rundet also quasi ab.
Ich fand long auf Anhieb die richtige Wahl. Ansonsten müsste ich mal im Javabuch schauen, was bei Modulo rauskommt, wenn man das auf Kommazahlen anwendet:
float diff=150
float minuten=diff / 60
minuten=2.5
2.5 & 60 = Restzeit in Minuten = 2.5
Da wäre long schon besser, wenn er die Nachkommastellen abschneidet.
long diff=150
long minuten=diff/ 60
minuten=2
2 % 60 = Restzeit in Minuten = 2
Naja, so ganz stimmt das was du geschrieben hast nicht.
Wenn noch 1 Tag und 2 Stunden verbleiben willst du ja nicht "noch 1 Tag 26 Stunden" dastehen haben.
Ahja, oki, ein Denkfehler von mir. Wenn ich nur durch 3600 Teile habe ich die gesamten Stunden, die in die Differenz reinpassen. Also 26 Stunden, anstatt 2 Stunden. Jetzt ist mir das ganze klar.
Ich fange immer von unten an, dann ist es "übersichtlicher".
sekunden = diff % 60
minuten = diff / 60 % 60
stunden = diff / 60 / 60 % 24 (gleichbedeutend mit diff / 3600 % 24)
tage = diff / 60 / 60 / 24 (und evtl noch % 7 wenn du wochen auch willst)
Okey vielen Dank für die Tipps und der Umrechnung. Ich werde alles mal mit ein paar Zahlen ausprobieren.
Grüße
Moin Moin!
Ich fange immer von unten an, dann ist es "übersichtlicher".
sekunden = diff % 60
minuten = diff / 60 % 60
stunden = diff / 60 / 60 % 24 (gleichbedeutend mit diff / 3600 % 24)
tage = diff / 60 / 60 / 24 (und evtl noch % 7 wenn du wochen auch willst)Okey vielen Dank für die Tipps und der Umrechnung. Ich werde alles mal mit ein paar Zahlen ausprobieren.
Bleibt zu erwähnen, dass diese Rechnung mit der harten Realität nicht klarkommt, sondern nur mit einem idealisierten Modell arbeitet. Schaltsekunden fehlen hier völlig, auch sind Kleinigkeiten wie Sommerzeit und eine Kalenderreform nicht berücksichtigt, bei der auf Donnerstag, den 4. Oktober Freitag, der 15. Oktober folgt -- oder eben auch einfach der 5. Oktober, und dafür später irgendwann mal ein paar Tage fehlen.
http://search.cpan.org/~drolsky/DateTime-0.41/lib/DateTime.pm#How_Datetime_Math_is_Done ist recht interessant zu lesen.
Alexander
echo $begrüßung;
ich wusste nicht, dass es SELECT TIME_TO_SEC gibt, deshalb konnte ich nicht danach googlen.
Das Kennen von Begriffen erleichtert die erfolgreiche Suche, ist aber keine zwingende Voraussetzung. "MySQL Zeitdifferenz" reicht aus, um auf TIME_TO_SEC zu stoßen.
tage=differenz/86400;
Das Festlegen eines Tages auf 86400 Sekunden geht von falschen Voraussetzungen aus. Es sei denn, du rechnest in UTC.
Du erwähntest DATEDIFF(). Es gibt noch jede Menge mehr Date and Time Functions. Ist dir beim Durchschauen TIMEDIFF() nicht aufgefallen oder haben dir die damit erreichten Ergebnisse nicht zugesagt?
echo "$verabschiedung $name";
... vorallem, weil ich ja schon um 11:12 Uhr mal darauf aufmerksam machte ... und auch da schon passende Suchbegriffe für's Googelieren nannte
tssss ... ;)
Frank
echo $begrüßung;
... vorallem, weil ich ja schon um 11:12 Uhr mal darauf aufmerksam machte ... und auch da schon passende Suchbegriffe für's Googelieren nannte
Ich hab mich ja nur an der Ausrede gestoßen, man könne nicht suchen, wenn man die Suchbegriffe nicht kenne.
Btw. Wie war es eigentlich in Florida?
echo "$verabschiedung $name";
Servus,
also, war ja nicht auf dich bezogen, sondern ne allgemeine Feststellung, dass der OP trotz Angabe der Stichworte und der Funktionen anscheinend immer noch nicht mal n Blick in die Doku geworfen hat und man es ihm nochmal sagen muss. Naja, egal, wieauchimmer. :)
Florida, ja, ich bin wieder zurück. Und dank dem Link hab ich fest gestellt, dass du mir ja die Empfehlung mit Crystal River gegeben hast. Und da kann ich nur sagen: Top Empfehlung. Das Plantation Inn hatte ne Renovierung hinter sich. Ich hab im neuesten Gebäude mit Fitness und drum und dran gewohnt, "direkt" an der Strasse ... also quasi 50m vom Golf Clubhouse entfernt. Nettes Personal, ne gut sortierte Bar (Silver Star Jack und Captain Morgen Private Reserve), freies WiFi in den Meetingräumen, Lobby und Restaurant.
Hab viel gegolft, oder eher die kleinen Gators in den Wassertümpeln aufgeschreckt. Die Golfschule (http://jaymorelligolf.com/) ist auch absolut zu empfehlen. Gute, einfühlsame Lehrer, easy-going Stil.
Bin dann zwei mal n Tampa in den Busch Gardens gewesen und ansonsten mal nach Ocala gefahren und mir die ganzen Wohnsiedlungen und Golfclubs angeschaut und einmal auch den ganzen Fort Island Trail rausgewandert bis zur Marina, wo das Atomkraftwerk recht gut sichtbar ist.
Restaurant-Empfehlung für Crystal River kann ich auch geben. Cody's Roadhouse Grill ... just good old plain american food. Nette Mädels hat es da :) Nur falls es mal jemanden dahin verschlägt und er dringend mal ein 24oz Porterhouse Steak essen muss/will :) Aber auch der House Salad und das Bacon Wrapped Filet Mignon sind köstlich.
Für Orlando und weitergehende Ausflüge blieb dann irgendwie gar keine Zeit mehr. :( Nächstes mal (Oktober) plan ich 3 Wochen Florida ein.
Manatees gab es diesmal gar keine, den war es zu kalt, die sind alle nach Bradenton und Sarasota runter gezogen.
In Clearwater Beach war ich dann noch im Holiday Inn (S Gulf View Blvd), nette 37" Flatscreens haben sie dort auf jedem Zimmer.
Also danke nochmals für den Tipp mit Crystal River. :)
Ciao, Frank
Grüße
Du erwähntest DATEDIFF(). Es gibt noch jede Menge mehr Date and Time Functions. Ist dir beim Durchschauen TIMEDIFF() nicht aufgefallen oder haben dir die damit erreichten Ergebnisse nicht zugesagt?
Doch, der Tipp von Frank hat ausgereicht. (TIME_TO_SEC) Hat auch optimal funktioniert. Dank Snafu habe ich die Umrechnung auch hingekriegt.
Grüße
echo $begrüßung;
(TIME_TO_SEC) Hat auch optimal funktioniert. Dank Snafu habe ich die Umrechnung auch hingekriegt.
Funktioniert es auch noch, wenn am 29. März dieses Jahres um 13:00 die Differenz bis zum Folgetag gleicher Uhrzeit angezeigt werden soll?
echo "$verabschiedung $name";
Grüße,
Funktioniert es auch noch, wenn am 29. März dieses Jahres um 13:00 die Differenz bis zum Folgetag gleicher Uhrzeit angezeigt werden soll?
Ich brauche nur immer von now() die Sekunden in die Zukunft. Warum sollte das obere Beispiel nicht funktionieren?
Grüße
echo $begrüßung;
Funktioniert es auch noch, wenn am 29. März dieses Jahres um 13:00 die Differenz bis zum Folgetag gleicher Uhrzeit angezeigt werden soll?
Ich brauche nur immer von now() die Sekunden in die Zukunft. Warum sollte das obere Beispiel nicht funktionieren?
Wenn du das Beispiel von Frank nimmst, das rechnet nicht richtig.
SELECT TIME_TO_SEC(TIMEDIFF(DatumMitZeit1,DatumMitZeit2))
TIME_TO_SEC mal weggelassen, ergibt
SELECT TIMEDIFF('2008-03-30 13:00:00', '2008-03-29 13:00:00')
ein Ergebnis von 24:00:00, was aber falsch ist. Richtig wäre aber 23:00:00. Das falsche Ergebnis kommt zustanden, weil die Funktion von UTC-Werten ausgeht. Du musst also erst einmal die lokale Uhrzeit nach UTC übersetzen, bevor du damit weiterrechnen kannst.
SELECT TIMEDIFF(CONVERT_TZ('2008-03-30 13:00:00', 'MET', 'UTC'), CONVERT_TZ('2008-03-29 13:00:00', 'MET', 'UTC'))
Zu beachten ist noch, dass MySQL mit Zeitzonendaten versorgt werden muss, wenn das noch nicht geschehen ist.
echo "$verabschiedung $name";
hay,
TIME_TO_SEC mal weggelassen, ergibt
SELECT TIMEDIFF('2008-03-30 13:00:00', '2008-03-29 13:00:00')
ein Ergebnis von 24:00:00, was aber falsch ist. Richtig wäre aber 23:00:00. Das falsche Ergebnis kommt zustanden, weil die Funktion von UTC-Werten ausgeht. Du musst also erst einmal die lokale Uhrzeit nach UTC übersetzen, bevor du damit weiterrechnen kannst.
Sorry, darf ich mal nachfragen, warum 23 Stunden richtig sind? Ah, ist da die Umstellung zwischen Sommer- und Winterzeit?
SELECT TIMEDIFF(CONVERT_TZ('2008-03-30 13:00:00', 'MET', 'UTC'), CONVERT_TZ('2008-03-29 13:00:00', 'MET', 'UTC'))
Zu beachten ist noch, dass MySQL mit Zeitzonendaten versorgt werden muss, wenn das noch nicht geschehen ist.
Danke für den Link, ich versuche das beste drauszumachen :-))
Gruß
Hi,
du möchtest ja auch die Zeitdifferenz und nicht nur die Datumsdifferenz. Vielleicht möchtest du eher folgendes verwenden:
SELECT TIME_TO_SEC(TIMEDIFF(DatumMitZeit1,DatumMitZeit2));
Die Suchbegriffe "mysql datetime diff seconds" hätten dich bei Google sehr schnell fündig werden lassen.
Deine Fehlermeldung "FUNCTION Tabelle.DATEDIFF does not exist" könnte an der Verwendung (i.e. Syntax) liegen. Du hast ja nur einen winzigen Teil deines SQL Statements angegeben, wahrscheinlich ist der Rest drumherum einfach fehlerhaft.
Ciao, Frank