Berechnungen mit Zeit
Hannes
- php
Hy,
ich hätte da mal eine Frage wie ich mein Script besser lösen könnte, ich glaube dass es nicht optimal ist und bin über jede bessere Lösung dankbar!
Für jedes Heft gibt es einen Anzeigenschluss. Ein Kunde gibt eine Anzeige auf, die aktuelle Uhrzeit wird gemessen und somit gecheckt in welches Heft die Anzeige hineinkommt (mittels des Anzeigenschlusses als timestamp) - funktioniert schon, aber ich denke dass es zuviel Aufwand ist für jede Ausgabe ein elseif aufzubauen?
<CODE>
// AUSGABE xxxx
$time=time();
if($time <= 1173221999) {
$issue='xxxx';
$et='01.04.2007';
}
// AUSGABE xxxx
elseif($time >= 1173221999) {
if($time <= 1175810399) {
$issue='xxxx';
$et='01.05.2007';
}
}
USW.
</CODE>
Besten Dank,
Hannes
hi,
Für jedes Heft gibt es einen Anzeigenschluss. Ein Kunde gibt eine Anzeige auf, die aktuelle Uhrzeit wird gemessen und somit gecheckt in welches Heft die Anzeige hineinkommt (mittels des Anzeigenschlusses als timestamp) - funktioniert schon, aber ich denke dass es zuviel Aufwand ist für jede Ausgabe ein elseif aufzubauen?
<CODE>
// AUSGABE xxxx
$time=time();
if($time <= 1173221999) {
$issue='xxxx';
$et='01.04.2007';
}// AUSGABE xxxx
elseif($time >= 1173221999) {
if($time <= 1175810399) {
$issue='xxxx';
$et='01.05.2007';
Jedes Mal beide Grenzen abzufragen ist schon mal unsinnig - sofern die Intervalle wirklich aneinandergrenzen, wie in deinem Beispiel.
Du könntest einfach die Grenzen in einem Array ablegen, und dieses dann so lange durchlaufen, wie der Vergleichswert nicht die nächste Grenze überschreitet.
gruß,
wahsaga
Jedes Mal beide Grenzen abzufragen ist schon mal unsinnig - sofern die Intervalle wirklich aneinandergrenzen, wie in deinem Beispiel.
Du könntest einfach die Grenzen in einem Array ablegen, und dieses dann so lange durchlaufen, wie der Vergleichswert nicht die nächste Grenze überschreitet.
gruß,
wahsaga
Ich danke dir für deine Hilfe, nur leider verstehe ich dich nicht ganz bzw. den Array Aufbau. Hättest du einen kurzen Lösungsansatz?
hi,
bitte zitiere sinnvoll, und nicht wahllos alles.
Ich danke dir für deine Hilfe, nur leider verstehe ich dich nicht ganz bzw. den Array Aufbau. Hättest du einen kurzen Lösungsansatz?
$intervallGrenzen = array(timestamp1, timestamp2, ..., timestamp4711);
gruß,
wahsaga
Hello,
Hättest du einen kurzen Lösungsansatz?
kürzer gings nicht
<?php ### find_ausgabe.php ###
$_ausgaben[1] = 20070101;
$_ausgaben[2] = 20070110;
$_ausgaben[3] = 20070120;
$_ausgaben[4] = 20070130;
$_ausgaben[5] = 20070209;
$_ausgaben[6] = 20070219;
$_ausgaben[7] = 20070301;
$abgabetermin = 20070208;
asort($_ausgaben);
$ausgabe = 0;
foreach($_ausgaben as $key => $val)
{
if ($val > $abgabetermin) break;
}
echo "<pre>\n";
echo "<p>Ausgabe: $key<p>\n";
print_r($_ausgaben[$key]);
echo "<pre>\n";
?>
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hello,
stehen die Werte in eienr Datenbank?
select min(az) from ausgaben where az > $abgabetermin;
Dann hast Du den zuständigen Anzeigenschluss
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
select min(az) from ausgaben where az > $abgabetermin;
Hallo,
danke für deine Hilfe. Ja es steht in einer MySQL Datenbank.
number | year | closing_date | date_of_publication
-------|------|--------------|---------------------
05 | 2007 | 1175724000 | 1177970400
06 | 2007 | 1179179999 | 1181512800
07 | 2007 | 1181080799 | 1183240800
Aber
$abfrage = "SELECT min(closing_date) FROM issue WHERE closing_date > $time";
gibt mir nur etwas leeres zurück.
Hello,
select min(az) from ausgaben where az > $abgabetermin;
Hallo,
danke für deine Hilfe. Ja es steht in einer MySQL Datenbank.
number year closing_date date_of_publication 05 2007 1175724000 1177970400 06 2007 1179179999 1181512800 07 2007 1181080799 1183240800 Aber
$abfrage = "SELECT min(closing_date) FROM issue WHERE closing_date > $time";gibt mir nur etwas leeres zurück.
Was gibt denn wohl
"select closing_date from issue;"
zurück?
Und wofur gibt es "UNIX_TIMESTAMP()"?
http://dev.mysql.com/doc/refman/4.1/en/timestamp-pre-4-1.html
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Was gibt denn wohl
"select closing_date from issue;"
zurück?
Und wofur gibt es "UNIX_TIMESTAMP()"?
http://dev.mysql.com/doc/refman/4.1/en/timestamp-pre-4-1.html
Es tut mir leid, aber ich verstehe nicht was du meinst.
Hello,
"select closing_date from issue;"
Es tut mir leid, aber ich verstehe nicht was du meinst.
Hast Du denn mal obige Abfrage durchgeführt und Dir angeschaut, was dabei herauskommt?
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hast Du denn mal obige Abfrage durchgeführt und Dir angeschaut, was dabei herauskommt?
Nichts, bzw. ein leer ;)
Hello,
Hast Du denn mal obige Abfrage durchgeführt und Dir angeschaut, was dabei herauskommt?
Nichts, bzw. ein leer ;)
Wie jetzt?
Bei select closing_date from issue;
kommt nichts heraus?
Dann sind wohl gar keine daten in Deiner Tabelle?
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Sorry, hatte das min() noch drumherum.
Bei
SELECT closing_date,number FROM issue WHERE closing_date > $time
kommt 0607 raus, also der richtige wert für das aktuelle datum.
was hatte das mit dem min() auf sich?
danke für deine hilfe
Sorry, hatte das min() noch drumherum.
Bei
SELECT closing_date,number FROM issue WHERE closing_date > $timekommt 0607 raus, also der richtige wert für das aktuelle datum.
was hatte das mit dem min() auf sich?
danke für deine hilfe
halt stop! nicht der richtige wert... so gibt er mir ja jede ausgaben nummer aus...
was muss ich nun mit dem min() machen? klingt irgendwie logisch, aber wenn er es in der select abfrage nicht annimmt?
Hello,
halt stop! nicht der richtige wert... so gibt er mir ja jede ausgaben nummer aus...
Dazu müssten wir erstmal die Spaltentypen Deiner Tabelle kennen und was in $time (dem Vergleichswert) drinteht.
Min() fiel mir nur gleich als erstes ein.
ein "limit 1" könnte für Dich viel interessanter werden, weil Du dann nicht nur den Termin sondern auch die Ausgabe und was Du sonst noch brauchst, bekommst. Sonst müsste man ein Subselect machen und das ist hier vollkommen unnötig (hoffe ich)
select number, closing_date
from issue
where unix_timestamp(closing_date) > $time
order by closing_date
limit 1;
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Dazu müssten wir erstmal die Spaltentypen Deiner Tabelle kennen und was in $time (dem Vergleichswert) drinteht.
klingt logisch,
schau mal hier:
http://forum.de.selfhtml.org/?t=150343&m=976998
Hello,
select min(az) from ausgaben where az > $abgabetermin;
Hallo,
danke für deine Hilfe. Ja es steht in einer MySQL Datenbank.
number year closing_date date_of_publication 05 2007 1175724000 1177970400 06 2007 1179179999 1181512800 07 2007 1181080799 1183240800
$abfrage = "SELECT min(closing_date) FROM issue WHERE closing_date > $time";
In welcher Form liegt $time vor?
Welchen Spaltentyp hat closing_date?
Führst Du das definierte Query auch durch? Wie?
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
In welcher Form liegt $time vor?
in einem timestamp
Welchen Spaltentyp hat closing_date?
momentan noch 'varchar'
Führst Du das definierte Query auch durch? Wie?
mein query sieht so aus:
$time=time();
$abfrage = "SELECT closing_date,number FROM issue WHERE closing_date > $time";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis)) {
echo $row->number;
}
Hello,
In welcher Form liegt $time vor?
in einem timestamp
Hatte ich vermutet
Welchen Spaltentyp hat closing_date?
momentan noch 'varchar'
hatte ich befürchtet, aber eher angenommen, dass es "timestamp" wäre
$time=time();
$abfrage = "SELECT closing_date,number FROM issue WHERE closing_date > $time";
echo "<p>Abfrage: ". htmlentities($abfrage,ENT_QUOTES)."</p>\n";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis)) {
echo $row->number;
}
Dass da nichts rauskommt, stellst Du am besten fest, wenn du die Zeile "echo $abfrage" mal einfügst.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
$time=time();
$abfrage = "SELECT closing_date,number FROM issue WHERE closing_date > $time";echo "<p>Abfrage: ". htmlentities($abfrage,ENT_QUOTES)."</p>\n";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis)) {
echo $row->number;
}Dass da nichts rauskommt, stellst Du am besten fest, wenn du die Zeile "echo $abfrage" mal einfügst.
Dann bekomme ich das:
Abfrage: SELECT closing_date,number FROM issue WHERE closing_date > 1176390601
060708
letzteres sind die ausgaben die in spalte number drin stehen...
Hello,
Dann bekomme ich das:
Abfrage: SELECT closing_date,number FROM issue WHERE closing_date > 1176390601060708
Lass uns nochmal sortieren
Du benutzt MySL.
Deine Spalte "closing_date" hat noch den Typ varchar, ist das richtig?
Welche Werte stehen da drin; so wie in https://forum.selfhtml.org/?t=150343&m=976953 beschrieben? Also zu strings gemachte UNIX-Timestamps (also in PHP mit time() erzeugt)?
Wenn das so ist, benötigst Du bei der Abrage auch kein "unix_timstamp()", da ja ein Stringvergleich durchgeführt wird. Besser wäre es natürlich, Daten auch als solche in der DB zu speichern, z.B. als "datetime"-Typ. Dann muss man natürlich wieder die Umwandlungsfunktion von MySQL benutzen
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Lass uns nochmal sortieren
ok!
Du benutzt MySL.
Deine Spalte "closing_date" hat noch den Typ varchar, ist das richtig?
Ja, richtig!
Welche Werte stehen da drin; so wie in https://forum.selfhtml.org/?t=150343&m=976953 beschrieben? Also zu strings gemachte UNIX-Timestamps (also in PHP mit time() erzeugt)?
genau!
Wenn das so ist, benötigst Du bei der Abrage auch kein "unix_timstamp()", da ja ein Stringvergleich durchgeführt wird. Besser wäre es natürlich, Daten auch als solche in der DB zu speichern, z.B. als "datetime"-Typ. Dann muss man natürlich wieder die Umwandlungsfunktion von MySQL benutzen
das klingt logisch, aber weiter gekommen bin ich deswegen noch nicht ;-)
Hello,
das klingt logisch, aber weiter gekommen bin ich deswegen noch nicht ;-)
Bei mir funktioniert das erstklassig.
$abfrage = "
select number, closing_date
from issue
where closing_date > '$time'
order by closing_date
limit 1";
und dann späater mit
$_ergebnis = mysql_fetch_assoc($res);
Das besteht dann aus $_ergebnis['number'] und $_ergebnis['closing_time']
Du musst nun nur die Funktion Unix_Timestamp() wieder rausnehmen, da Du nur Strings vergeleichst
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom