modulo % Rechnung und Zahlensysteme (Rechnen mit Rest)
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausgabe
code
date
delta
funktion
http
jahr
minute
monat
null
re
rest
sekunde
setting
start
string
stunden
tag
url
zahl
-
Hallo
grundsätzlich kapier ich das tag/re">Rechnen mit Rest grad garnicht
ich möchte für einen Cache eine Ausgabe machen,
in wie vielen Stunden und Minuten (und Sekunden) das nächste Update kommt
$jetzeit = time();
$startnextupdatezeit = ... // --- gespeicherte Zeit (timestamp) für nächstes Update
$abstand_sec = ($startnextupdatezeit - $jetzeit);
$abstand_min = ($abstand_sec / 60);
$abstand_hrs = ($abstand_min / 60);
$abstand_resthrs = round($abstand_hrs,2);
$abstand_restmin = ($abstand_min % 60); // --- Rechnen mit Rest
Bei einem Test mit Cache-Zeit alle 48 Stunden hab ich folgendes Ergebnis
$abstand_resthrs => 47.75
$abstand_restmin => 45
ich dachte mit dem Operator % bekomme ich den Rest-Wert der Division
also habe ich dort 7512345 (ungerundet) erwartet
... es kommt aber gleich die Zahl umgerechnet in Minuten ?!?!
ok, hier bei Zeit-berechnung ja ganz nett,
aber was mache ich wenn ich mal bei "normale" Zahlen mit Rest rechnen will
z.B. Bei Preisen, bei denen 100% ja 100 ist und nicht wie bei Zeiten 100% gleich 60 ist
?!?!?!
Rechnen mit Rest mit dem Operator % ??????? häää?
Wann greift welches Zahlensystem? Urhzeit (60er) oder Normal (100er) ???
Gibt es einen anderen Operator für modulo-Rechnen im 100er Zahlensystem ?
klärt mich bitte mal auf ....
Danke
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hey ;)
Deine Frage kann ich dir direkt nicht beantworten, da ich nicht genau verstehe, was du willst aber vil. kann ich dir in einem anderen Punkt helfen.
ich dachte mit dem Operator % bekomme ich den Rest-Wert der Division
also habe ich dort 7512345 (ungerundet) erwartet
... es kommt aber gleich die Zahl umgerechnet in Minuten ?!?!
Weder die eine, noch die andere Aussage ist richtig...
abstand_restmin = ($abstand_min % 60); // --- Rechnen mit Rest
Was auch immer das ergibt, es wird definitiv eine Zahl zwischen 0 und 59 sein.
Ich glaube, du hast die Modulo-Rechnung nicht ganz verstanden. Ich erkläre es dir mal mit niedrigen Zahlen:
5 % 3 = 2.
Warum?
Weil 5 / 3 genau einmal teilbar ist, und dann 2 Rest hat.
8 % 3 = 2.
Warum?
Weil 8 / 3 genau zwei mal teilbar ist, und dann 2 Rest hat.
In PseudoCode sieht der Modulo-Algorithmus (für positive Zahlen) so aus:
int modulo(int value, int mod) { while(value >= mod) { value -= mod; // Ziehe von value mod ab. } return value; // Liefert eine Zahl zwischen 0 und mod-1 zurück, falls value bei Funktionsaufruf > 0 war. }
Ich hoffe du verstehst nun etwas besser, was Modulo macht.
Restwert != Restliche Zeit berechnen.
lg
Sincer -
Hallo
danke, also der Operator % gibt NICHT den Rest-Wert einer Division her
sondern den Rest der Ausgangszahl, die bei maximalen vollen Teilern übrig bleibt
oder wie sagt man das ... aber habs kapiert Danke Deinen BSPs
aber wie komme ich an den Rest-Wert ran?
BSP: 8 / 3 = 2.666666....
wie kommr ich also an die 666666....
BSP: 9 / 4 = 2.25
wie kommr ich also an die 25
mit $erg = explode(".",$zahl); .... und dann $erg[1] ???
oder gibt es da einen anderen Operator ?
und zur Zeit-Berechnung:
wie erhalte ich aus zwei unterschiedlichen Timestamp-Werten den Abstand im Zeit-Format?
also
1311156606 und 1311144261
Abstand: 12345 (in Sekunden)
wie mache ich aus 12345 Sekunden sowas wie x Stunden und y Minuten und z Sekunden
Danke
Beitrag zuletzt geändert: 20.7.2011 12:13:17 von promohit -
Vielleicht helfen dir die Beiträge in diesem Thread weiter, vorallem der letzte Beitrag. Dort habe ich so ein ähnliches Problem ziemlich ausführlich erklärt. Es ging auch um die Umrechnung von Sekunden in Stunden, MInuten und Sekunden.
Bei Fragen melde dich einfach.
edit: und benutze in Zukunft bitte den [code]-Tag für Quellcode
Beitrag zuletzt geändert: 20.7.2011 12:22:13 von alfr3d -
Also ersteres funktioniert so und anders gehts leider nicht:
$nachkomma = x / y - floor( x / y );
Das mit der Zeit funktioniert so:
$zwischenw = $gesamtzeit; $sekunden = $gesamtsec % 60; $zwischenw = floor( $gesamtsec / 60 ); $minuten = $zwischenw % 60; $stunden = floor( $zwischenw / 60 )
@alfr3d:
Jetzt hab ichs einmal geschrieben da schick ichs trotzdem ab. -
promohit schrieb:
mal an UNIX-Timestamp gedacht?
... in wie vielen Stunden und Minuten (und Sekunden) das nächste Update kommt
lg -
Also wenn du einfach nur eine Zeitangabe, die du sekunden hast, umrechnen willst in die jeweiligen Minuten, Stunden, Tage etc. geht das recht einfach (wobei ich nicht garantiere, das es der schnellste oder gar effektivste weg ist, eher nicht) mit folgender Methode:
$time = x #gesamtzeit in sekunden
$seconds = $time % 60 #das ist die Sekundenangabe
$time = ($time - $seconds) / 60 #da der rest subtrahiert wird, ergibt dies jetzt immer eine ganze zahl
$minutes = $time % 60 #da wir im vorherigen schritt von sekunden in minuten umgerechnet haben, hier nun die minuten ^^
$time = ($time - $minutes) / 60 #siehe 2 zeilen vorher
$hours = $time % 24 # sind ja nur 24 Stunden pro tag, und nicht 60 ^^
$time = ($time - $hours) / 24 #siehe 2 zeilen vorher
usw. ich glaub ist verständlich was ich meine ^^
Und allgemein zum %-Operator:
Der Operator gibt dir immer den Rest raus, wie man es glaube ich in der 4. Klasse oder so noch gelernt hat.
10 % 2 ist 0, da 2*5 = 2 + 0 gilt.... x % 2 = [0,1], da 2*y = x + [0,1] gilt... ich weiß nicht ob das jetzt viel verständlicher ist als die einfache aussage darüber -.- (mit [0,1] ist übrigens gemeint eine der beiden zahlen -.-) -
promohit schrieb:
aber wie komme ich an den Rest-Wert ran?
BSP: 8 / 3 = 2.666666....
wie kommr ich also an die 666666....
BSP: 9 / 4 = 2.25
wie kommr ich also an die 25
mit $erg = explode(".",$zahl); .... und dann $erg[1] ???
oder gibt es da einen anderen Operator ?
Also ich würde das so machen:
$zahl = 3.123; $erg = $zahl - intval( $zahl ); //Das Ergebnis ist: 0.123
Damit solltest du auch auskommen können...
Alles andere braucht mehr Speicher.
Wenn du aber wirklich nur die Zahl haben willst dann kannst du das so machen:
$zahl = 3.123; $erg = $zahl - intval( $zahl ); //Das Ergebnis ist: 0.123 while( intval( $erg ) != $erg ) // Überprüfen ob $erg Nachkommastellen hat { $erg *= 10; //Das Komma in $erg um einen nach rechts verschieben }
Das ist so wie ich das machen würde, alle anderen Arten arbeiten mit Strings und da kann es bei der Umwandlung zu Fehlern kommen.
Beitrag zuletzt geändert: 21.7.2011 17:19:49 von coder-0x1 -
promohit schrieb:
mit hexagesimal arithmetik. ja! mathe ist ein hund, daher: folgende niedliche classe von mir ist nichts für schwache nerven ;o)
... wie mache ich aus 12345 Sekunden sowas wie x Stunden und y Minuten und z Sekunden
allerdings! es geht 'nur' bis 59:59:59 unterschied (das ist 215999 sec)! warum? ja da darf man selbständig darüber nachdenken, dass auch ihr was davon habt ;o) [streng genommen geht es ja natürlich noch weiter, weil die zeit hört bekannter weise nicht auf zu ticken, aber das ist dann auch nichts mehr für matheprofis mit stahlnerven! wagt sich wer daran????]
und jetzt endlich die klasse:
<?php $s = 1311144261; // start $e = 1311156606; // end // Hgm steht für hexagesimal $diff = new CHgmDiff($s, $e); echo $diff->res; // HgmDiff = hexagesimal diff class CHgmDiff { public $delta = null; public $res = null; public $h = null; public function __construct($start, $end) { $this->delta = $end - $start; if($this->delta > 215999) { $this->res = '60h oder mehr!'; return; } $this->convert($this->delta, 0); // das ergebnis muss noch formatiert werden $this->res = substr(substr('0' . $this->h[0], -2) . ':' . $this->res, 0, -1); } // hier vird rekursiv konvertiert public function convert($left, $right) { if(is_int($left)) $left .= '.0'; $aval = explode('.', (string)($left / 60)); $this->res = substr('0' . round(((string)'.'.$aval[1]) * 60), -2) . ':' . $this->res; if($aval[0] >= 60) { $this->convert($aval[0], $aval[1]); } $this->h[] = $aval[0]; } public function __toString() { return '<pre>' . print_r($this, true) . '</pre>'; } }
no dann
lg
Beitrag zuletzt geändert: 22.7.2011 1:30:23 von hemiolos -
hemiolos schrieb:
promohit schrieb:
mit hexagesimal arithmetik. ja! mathe ist ein hund, daher: folgende niedliche classe von mir ist nichts für schwache nerven ;o)
... wie mache ich aus 12345 Sekunden sowas wie x Stunden und y Minuten und z Sekunden
allerdings! es geht 'nur' bis 59:59:59 unterschied (das ist 215999 sec)! warum? ja da darf man selbständig darüber nachdenken, dass auch ihr was davon habt ;o) [streng genommen geht es ja natürlich noch weiter, weil die zeit hört bekannter weise nicht auf zu ticken, aber das ist dann auch nichts mehr für matheprofis mit stahlnerven! wagt sich wer daran????]
und jetzt endlich die klasse:
<?php $s = 1311144261; // start $e = 1311156606; // end // Hgm steht für hexagesimal $diff = new CHgmDiff($s, $e); echo $diff->res; // HgmDiff = hexagesimal diff class CHgmDiff { public $delta = null; public $res = null; public $h = null; public function __construct($start, $end) { $this->delta = $end - $start; if($this->delta > 215999) { $this->res = '60h oder mehr!'; return; } $this->convert($this->delta, 0); // das ergebnis muss noch formatiert werden $this->res = substr(substr('0' . $this->h[0], -2) . ':' . $this->res, 0, -1); } // hier vird rekursiv konvertiert public function convert($left, $right) { if(is_int($left)) $left .= '.0'; $aval = explode('.', (string)($left / 60)); $this->res = substr('0' . round(((string)'.'.$aval[1]) * 60), -2) . ':' . $this->res; if($aval[0] >= 60) { $this->convert($aval[0], $aval[1]); } $this->h[] = $aval[0]; } public function __toString() { return '<pre>' . print_r($this, true) . '</pre>'; } }
no dann
lg
Es geht auch VIEL einfacher:
function ParseTime( $sekunden ) { $jahre = intval( $sekunden / 31557600 ); // 60*60*24*365 + 60*60*6 $rest = $sekunden - $jahre * 31557600; $wochen = intval( $rest / 604800 ); // 60*60*24*7 $rest -= $wochen * 604800; $tage = intval( $rest / 86400 ); // 60*60*24 $rest -= $tage * 86400; $stunden = intval( $rest / 3600 ); // 60*60 $rest -= $stunden * 3600; $minuten = intval( $rest / 60 ); // 60 $rest -= $minuten * 60; $sekunden = $rest; // Das ganze als String verpacken und zurückgeben }
Hab ich nicht getestet müsste aber zu 99,99% funktionieren.
-
coder-0x1 schrieb:
99.99% ?? bist du statistiker?? also funktionieren tut schon, nur warum soll es einfacher sein? meine funktion (public function convert(...)) hat 6 zeilen code, die nicht nur berechnen was er braucht (nur stunden, minuten und secunden, und nicht die ganze sternzeit vom 'StarDreck' [kein druckfehler]) sondern formatieren auch die ausgabe. bei dir sehe ich 11 zeilen code, keine formatierung und keine rückgabe (gut! irgend etwas muss er ja auch machen, was wir bei deiner lösung natürlich als lerneffekt gutschreiben müssen ;o)
... Hab ich nicht getestet müsste aber zu 99,99% funktionieren.
lg
p.s.: zum schluss kannst du noch nachdenken, warum deine lösung nicht hexagesimal rechnet? -
hemiolos schrieb:
coder-0x1 schrieb:
99.99% ?? bist du statistiker??
... Hab ich nicht getestet müsste aber zu 99,99% funktionieren.
Ein wenig...
hemiolos schrieb:
also funktionieren tut schon, nur warum soll es einfacher sein?
Weil es einfach nur auf Grundrechenarten beruht, die jeder, der die Grundschule abgeschlossen hat, verstehen kann.
hemiolos schrieb:
meine funktion (public function convert(...)) hat 6 zeilen code, die nicht nur berechnen was er braucht (nur stunden, minuten und secunden, und nicht die ganze sternzeit vom 'StarDreck' [kein druckfehler])
Es ist übrigens die Planetenzeit, aber egal...
Außerdem lege ich ein wenig ert auf Vollständigkeit...
hemiolos schrieb:
sondern formatieren auch die ausgabe. bei dir sehe ich 11 zeilen code, keine formatierung und keine rückgabe (gut! irgend etwas muss er ja auch machen, was wir bei deiner lösung natürlich als lerneffekt gutschreiben müssen ;o)
lg
p.s.: zum schluss kannst du noch nachdenken, warum deine lösung nicht hexagesimal rechnet?
Weil sie nur mit der Anzahl der Sekunden rechnet?!?!
Muss sie desswegen falsch sein? -
coder-0x1 schrieb:
wie auch immer (bevor wir noch zu spammen anfangen ;o)
...
wir vermissen allerding eine stellungnahme von @promohit!!?? es gibt da immerhin paar ansätze ...
lg -
Hallo und Danke für die ausführliche Diskussion
1) .... zum Rest:
also so wie ich es verstanden habe, dann wären Lösungen für den Rest-Wert:
$erg = $zahl - intval( $zahl );
und / oder
$nachkomma = $a / $b - floor( $a / $b );
2 a) ... zum Zeit-Abstand zwischen zwei timestamps:
die Funktion von coder-0x1 funktioniert, aber ich verstehe da was nicht
warum bei Jahre // 60*60*24*365 + 60*60*6
also 60*60*24*365 ist klar aber warum + 60*60*6
365 Tage und 6 Stunden ?
... ist es nicht besser Schaltjahre zu erkennen, wenn ja dann 366 nehmen?
?
BSP
function schaltjahr($jahr){ if(($jahr % 400) == 0 || (($jahr % 4) == 0 && ($jahr % 100) != 0)) return TRUE; else return FALSE; }
gibts dafür nicht auch ne date() Funktion, hab keine gefunden ?!
EDIT: ok, das brauche ich aber garnicht, da mein Abstand meist unter 1 Jahr ist
und dann wird's kompliziert, ...
prüfen ob zwischen Start-Timestamp und End-Timestamp Schaltjahre liegen.
wenn ja, wieviele und .. ach oje
2 b) ...
die Klasse von hemiolos funktioniert, aber ich verstehe da was nicht
$this->delta = $end - $start; if($this->delta > 215999) { $this->res = '60h oder mehr!'; return; }
heisst ja, bei einem Abstand der größer als 60 Stunden ist, kommt diese Ausgabe.
60 Stunden sind doch 2 Tage und 12 Stunden ( 60 / 24 = 2,5 )
welchen Sinn macht da 60 Stunden? wäre es nicht Sinnvoll da mit 24 Stunden zu arbeiten
um der Ausgabe ggf. noch Tage vorne anzufügen (falls erreicht) ?! (anstatt "60h oder mehr")
oO:
@yinan
funktioniert auch, DANKE für das beispiel, hast nur die ; (Semikolon) vergessen :P
$xtime = 93902; $seconds = $xtime % 60; $xtime = ($xtime - $seconds) / 60; $minutes = $xtime % 60; $xtime = ($xtime - $minutes) / 60; $hours = $xtime % 24; $xtime = ($xtime - $hours) / 24; $days = $xtime % 7;
Beitrag zuletzt geändert: 25.7.2011 8:52:00 von promohit -
promohit schrieb:
... bei einem Abstand der größer als 60 Stunden ist (sagst du) ... <==> $this->delta > 215999 (sage ich eine zeile davor)
...
2 b) ...
die Klasse von hemiolos funktioniert, aber ich verstehe da was nicht
$this->delta = $end - $start; if($this->delta > 215999) { $this->res = '60h oder mehr!'; return; }
heisst ja, bei einem Abstand der größer als 60 Stunden ist, kommt diese Ausgabe.
60 Stunden sind doch 2 Tage und 12 Stunden ( 60 / 24 = 2,5 )
welchen Sinn macht da 60 Stunden? wäre es nicht Sinnvoll da mit 24 Stunden zu arbeiten
um der Ausgabe ggf. noch Tage vorne anzufügen (falls erreicht) ?! (anstatt "60h oder mehr")
oO:
das heißt: größer als 59:59:59 (und nicht größer als 60!)
ich höre einige schon laut schmunzeln - was! eine sekunde????
ja! schon in den siebzigern (im vorigen jahrtausend!!) haben us-militärs raketen gesteuert mit computer. der programmierer (er bediente sich damals MASCHIENENSPRACHE, also KEIN ASSEMBLER!!!!) hat die 10-millionstel secunden gerundet und siehe da! das ziel wurde von hunderten meilen verfehlt (400-500! enorm). die haben damals an dem problem 5 jahre laboriert (jetzt darf ich schmunzeln ;o)
weiters darf man sich die frage stellen: warum date, time und dateime, diese merkwürdige 'dreifaltigkeit'!!?? [und überhaupt binär, oktal, hexadezimal, hexagesimal und andere zahlensysteme ...] ich habe hier die time-variante genommen (weil du ja nach stunden-minuten-sekunden gefragt hast) und das hexagesimale-zeitrechnung(!) geht 3-stellig nun mal nur bis 59:59:59 :o( [oder ist man mathematisch etwas versierter]
wenn es sich hier dafür interesse genug zeigt, mache ich einen eigenen thread auf, weil das hierher eigentlich nicht reingehört und weil das ganze hier den rahmen sprengen würde. es ginge dann um - wenn auch nur sehr rudimentär - zahlensysteme und - weil das allein nicht reicht(!) - um (mathematische)semiologie. (und das innerhalb von php UND mysql [wo auch einige so paar probleme mit zeit und datum haben].)
also bei interesse melden, sonst wird nix verraten.
lg -
Hallo
upsala, ist da jemand ein bischen genervt von "dummen Fragen" ?! .... SORRY
mir ist (war) schon klar, das 215999 eine Sekunte weniger als 60h ist
ich hab das mit den 60h ja nur (der Einfachheit halber) übernommen,
weil im Code ja auch steht '60h oder mehr!' ...
es geht mir nur um die Frage: lässt sich die Klasse erweitern mit Tagen (Wochen, Monaten)
ich will die Funktion (Klasse) ja auch garnicht schlecht machen, die ist echt prima,
darum gehts auch garnicht, sondern um meinen Wunsch die zu erweitern.
meine Idee ist ja lediglich das die 3-stellige Ausgabe (59:59:59) um Tage zu erweitern
zu einer 4-Stelligen (oder mehr) ? also BSP (Tage:Stunden:Minuten:Sekunden) ...
bei Stunden gibt es ja maximal 23
und anstatt 24 dann Stunden=00 und den Tag um eins erhöhen
nur als Idee
das wäre für mich logisch (auch wenns vielleicht nicht der mathematischen Definition entspricht)
denn bei Minuten (und Sekunden) gibts ja auch kein 60 als Wert
sondern es wird 00 und das jeweilig voranstehende Segment (element) wird um 1 erhöht
ok, das ist ein BREAK vom 60er System ins 24er (bei Wochen ins 7er, etc)
mein Ziel ist ja "nur" den Besuchern auf einer Webseite zu sagen:
.... noch x Tage und x Stunden und x Minuten und x Sekunden bis ...
evtll sogar .. noch x Wochen und x Tage und x Stunden
oder evtl sogar ... noch x Monate und evtl sogar .... noch x Jahre ... etc.
(Monate wäre genug denn sonst kommt das Problem mit den Schaltjahren)
also bitte nicht böse sein, wenn ich mich jetzt nicht für binär, oktal, hexadezimal, hexagesimal und andere zahlensysteme allzusehr interessiere, ich bin halt auch kein Mathematiker und nur auf der Suche nach User-freundlicher Ausgabe eines Zeit-Abstandes.
Z.B. ... dieser Gutschein ist noch ... gültig oder ... das nächste Update kommt in ...
oder ähnliche Infos.
Danke also für den Lösungasanzatz mit der Klasse,
und Entschuldigung bitte wenn meine Fragen und Ideen dazu etwas "blöd" sind,
aber sie sind nunmal da ... und raus
:o
Beitrag zuletzt geändert: 25.7.2011 14:30:11 von promohit -
promohit schrieb:
i wo! ich bin nur froh, wenn ich nach meinen bescheidenen möglichkeiten helfen, zu etwas beitragen kann. (es gibt bei gott genug gebiete, wo ich mir nicht einmal zumute, die frage zu stellen ;o)
... upsala, ist da jemand ein bischen genervt von "dummen Fragen" ?! .... SORRY
...
ok. jetzt verstehe ich warum du ausdehnungslose entitäten mit intervallen verwechelst :o) auch das ist aber kein problem!
...
also bitte nicht böse sein, wenn ich mich jetzt nicht für binär, oktal, hexadezimal, hexagesimal und andere zahlensysteme allzusehr interessiere
obwohl du in diesem beitrag exakt stunden, minuten und sekunden wolltest (ich habe dich zu ernst genommen ;o), sehe ich ein, dass jemand seine meinung ändern kann. in diesem sinne werde ich die klasse so kompletieren: yyyy-mm-dd (W) HH:ii:ss [W zweistelliig optional] natürlich als INTERVALL :) zwischen start und end. WOBEI: es muss kalenderjahr, kalendermonat, kalenderwoche und kalendertag gelten!
morgen werde ich die neue version veröffentlichen. vieleicht brauch noch jemand.
damit ich hier dann auch fertig bin.
lg
-
hemiolos
ok. jetzt verstehe ich warum du ausdehnungslose entitäten mit intervallen verwechelst
und ich verstehe bei sowas nur Bahnhof :D ... naja ...
wäre schön wenn Du die Klasse entsprechend erweitern kannst, dafür wäre (bin) ich dir sehr dankbar.
im Zuge dieser Diskussion habe ich auch bemerkt, das ich mit Klassen in PHP auch kaum was blicke,
also Funktionen mit Aufruf-Parameter und Rückgabe-Werte .. ok ... aber Klassen muss ich noch "lernen"
scheint aber ein nützliches Konstrukt zu sein :oOo:
gleich mal ne Fragde dazu (Klassen)
woher weiss die Funktion public function __construct($start, $end)
dass $start ) $s ist ( und $end = $e)
... mit new CHgmDiff($s, $e); wird ja an die Klasse übergeben, aber nicht (sichtbar) weiter an die Funktion?
woher weiss die Funktion __toString() .... welche Parameter verwendet werden,
da werden ja gar keine übergeben ?
Fragen über Fragen, muss mich da erst einarbeiten
Danke!
-
promohit schrieb:
ich habe es zwar für heute versprochen, aber erstens einmal alles kommt, zweitens einmal gamz anders, als erwartet :o) ich werde dich auf alle fälle benachrichtigen.
... wäre schön wenn Du die Klasse entsprechend erweitern kannst, dafür wäre (bin) ich dir sehr dankbar.
... auch bemerkt, das ich mit Klassen in PHP auch kaum was blicke, ...
das wird dir helfen!
... scheint aber ein nützliches Konstrukt zu sein
wohl wohl!
gleich mal ne Fragde dazu (Klassen)
wenn du new sagst, dann wird eine klasse 'instantiiert', anders rum wird nach der klassendefinition ein objekt erzeugt. hat die klasse eine funktion __construct(...), wir diese gleich aufgerufen, dass da am anfang gleich was gscheites passiert.
woher weiss die Funktion public function __construct($start, $end)
dass $start ) $s ist ( und $end = $e)
... mit new CHgmDiff($s, $e); wird ja an die Klasse übergeben, aber nicht (sichtbar) weiter an die Funktion?
woher weiss die Funktion __toString() .... welche Parameter verwendet werden,
genau! __toString() ist eine 'leere' funktion, die du selbst dazu bringen musst, etwas nützliches zu machen. einzig wichtig bei der ist, dass sie unbeding einen string zurückgibt, wenn auch eine leere (was allerding nicht so nützlich wäre)!
da werden ja gar keine übergeben ?
was das in dieser klasse macht, kannst sehen, wenn du statt
einfach$object = new CHgmDiff($s, $e);
schreibstecho $object = new CHgmDiff($s, $e);
hiemit sind wir vom thema reichlich abgeglitten, hoffentlich kriegen wir nicht auf den deckel. wie gesagt: all das durchexerzieren
lg
Beitrag zuletzt geändert: 26.7.2011 23:09:05 von hemiolos -
oh ja, da hab ich viel zu lesen und rumprobieren ... Klasse!
zu Zeitabstand zwischen zweit timestamps
auch wenn Du diese Erweiterung nicht schreibst, ist ja nicht soooo wichtig,
schön wäre es aber trotzdem,
denn auch mit den anderen Vorschlägen bekomme ich nicht ganz ans Ziel
EDIT:
ach ... lustig was ich da gerade gefunden habe
http://de2.php.net/manual/de/function.date-diff.php
aber damit bekomme ich es auch nicht ganz richtig hin
jetzt mach ich nen Trick: date_parse() und Start-Zeit-Werte abziehen ... :)
$s = time(); $e = ($s + (3600*24*367) + 120 + 11); $diff = ( $e - $s); $erg2 = date_parse(date("Y-m-d H:i:s", ($diff) )); // ------- minus 01.01.1970 ------- $erg2['year'] = ($erg2['year'] - 1970); $erg2['month'] = ($erg2['month'] - 1); $erg2['day'] = ($erg2['day'] - 1); echo "<pre>\r\n"; print_r($erg2); echo "</pre>\r\n";
und das Ergebnis sieht ganz gut aus
Array
(
[year] => 1
[month] => 0
[day] => 2
[hour] => 1
[minute] => 2
[second] => 11
...
}
aber ob das so gut ist ... naja, scheint aber immerhin zu funktionieren.
Beitrag zuletzt geändert: 31.7.2011 13:50:39 von promohit -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage