kostenloser Webspace werbefrei: lima-city


PHP || DateTime in String konvertieren

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    Guten Abend,

    ich arbeite gerade an einem PHP Script, welches Werte aus diversen XML-Dateien mit Werten aus einer MySQL Datenbank vergleicht und gegebenenfalls die Werte der XML-Datei auf dem MySQL Server synchronisiert.

    Das funktioniert ja alles soweit, jetzt hänge ich allerdings beim letzten Arbeitsschritt, der noch zu machen wäre, fest....nämlich der Update-Abfrage zur MySQL Datenbank.

    $query = "UPDATE users SET lastpaydate='".$paydate."', payeduntil='".$finaltimeadd."' WHERE customer='".$customer."'";


    Die Variable $customer macht soweit keine Probleme, da diese bereits ein String ist.
    Die beiden Variablen $paydate und $finaltimeadd sind DateTime Objekte, die zuvor von der MySQL Datenbank abgerufen wurden.
    Das Format wäre hier "yyyy-MM-dd HH:mm:ss".

    Ich hab es zwar erfolgreich geschafft, die beiden Variablen von Strings in DateTime Objekte umzuwandeln, nachdem ich sie von der Datenbank geholt hatte, das ganze Rückgängig zu machen, damit ich die geänderten Werte in die Update-Abfrage einbauen kann, will mir aber nicht gelingen.


    Also mein Problem:

    Wie konvertiere ich DateTime Objekte zu Strings zurück?
    Irgendwas in der Richtung $str = tostring("yyyy-mm-dd hh:mm:ss", $paydate) vielleicht?
    Habe gegoogled und ein paar Beispiele und Lösungen ausprobiert, kam aber nicht zu einem brauchbaren String.

    Beitrag zuletzt geändert: 2.12.2011 22:21:20 von adelwoehrer
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. echo date('d.m.Y H:i:s', strtotime($paydate))


    So?!
  4. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    Das hatte ich bereits versucht, aber dabei wird die in der Variable $paydate gespeicherte Zeit zurückgesetzt.
    Das Ergebnis bei dieser Abfrage ist immer "1970-01-01 01:00:00".
    Selbes Ergebnis, wenn ich statt $paydate $finaltimeadd verwende.

    Wenn ich mir also mit dem Befehl "echo date('Y-m-d H:i:s', strtotime($paydate));" die Variable $paydate ausgeben lasse, in der Definitiv ein Wert von "2012-01-01 00:00:00" steht, dann ist das Ergebnis "1970-01-01 01:00:00".


    Mal abgesehen davon...."strtotime" (string to time) heißt doch, man möchte einen String in ein DateTime Objekt umwandeln....soll heißen, in den Klammern danach wäre warscheinlich ein String anzugeben, kein DateTime Objekt ($paydate).

    Beitrag zuletzt geändert: 2.12.2011 23:57:08 von adelwoehrer
  5. Jetzt nochmal zum Verständnis:

    Du willst aus yyyy-MM-dd HH:mm:ss - d.m.Y H:i:s machen, richtig? Oder hab ich das einfach falsch verstanden?
  6. Diese Zeitfunktionen hasse ich auch. Da funktioniert nie was auf Anhieb.
    Wäre es nicht besser, die Zeiten in der Datenbank als unix-timestamp einzutragen?
    Das müsste doch Speicherplatz sparen, wenn dann ein einfacher integer dafür ausreicht.
    Dazu könnte man vor dem Einlesen strtotime() verwenden und beim Auslesen date(). Oder habe ich das falsch verstanden?

    Du könntest auch mal
    echo strtotime($paydate);
    anschauen, ob das überhaupt vernünftig übersetzt wurde. "1970-01-01 01:00:00" entspricht ja einem timestamp von null, während der 1.1.2012 ja einem timestamp von 1325372400 entsprechen müsste.
  7. Alternativ gäbe es übrigens auch folgende Möglichkeit (für Datetime-Objekte):

    <?php
    $date = new DateTime('2012-01-01 00:00:00');
    echo $date->format('d.m.Y H:i:s');
    ?>


    Anderfalls hilft dir vllt. auch die MySQL-interne Funktion DATE_FORMAT()

    Bin aus dem Eingangspost leider noch nicht schlau geworden, was du hast und was du brauchst :D

    Beitrag zuletzt geändert: 3.12.2011 0:39:11 von fabo
  8. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    Bin aus dem Eingangspost leider noch nicht schlau geworden, was du hast und was du brauchst :D

    Ich will weder Zeiten umformatieren noch mit MySQL internen Befehlen rumbasteln.
    Ich möchte nur ein DateTime Objekt in einen String umwandeln, damit ich diesen Sring dann in ner Variable gespeichert hab.

    DateTime --> String, mehr brauch ich nicht.

    Ich hole mir eine Zeit als String von der Datenbank.
    Diese Zeit liegt dann als String im Format Y.m.d H:i:s in einer String-Variable. (Das Format ist irrelevant für meine Frage, vergesst das einfach. =) )
    Diese String Variable wandel ich durch den Befehl $date = new DateTime($Stringvariable) in ein DateTime Objekt um.
    Dieses DateTime Objekt kann ich danach in einer If-Abfrage sinnvoll mit anderen Zeit Objekten vergleichen.
    Ist dies geschehen, möchte ich dieses entstandene DateTime Objekt wieder in einen String zurück verwandeln.

    Also $Stringvariable = new String($date) oder so irgendwie, nur mal zum veranschaulichen. =)

    Beitrag zuletzt geändert: 3.12.2011 16:48:51 von adelwoehrer
  9. Ja, sowas müsste da doch gehen:
    $stringvariable = date_format($object, 'd.m.Y H:i:s');
  10. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    @carpaltunnel

    Danke, das scheint funktioniert zu haben. =)
  11. adelwoehrer schrieb:
    @carpaltunnel

    Danke, das scheint funktioniert zu haben. =)


    Ist im Prinzip genau das Selbe wie das, was ich zuletzt gepostet hab. Aber immerhin funktionierts ja nun :)
  12. Ja, stimmt, in deinem Link steht das auch drin :)
    Aber adelwoehrer, was mich wirklich noch interessieren würde ist, ob es einen bestimmten Grund gibt, warum du für deine Vergleiche nicht den timestamp sondern die DateTime-Objekte verwendest. Weil ich bisher darin noch keinen Vorteil erkennen konnte, ich hielt das immer nur für komplizierter und langsamer.

    Beitrag zuletzt geändert: 4.12.2011 5:10:51 von carpaltunnel
  13. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    Ganz einfach....ich wusste es nicht besser. =)
    Bin grad dabei, die Tabellen auf Timestamps umzuschichten.
  14. Überlege dir aber auch hier vorher, welche Art des Timestamps du nutzen willst, da MySQL-Timestamp != Unix-Timestamp.
  15. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    Überlege dir aber auch hier vorher, welche Art des Timestamps du nutzen willst, da MySQL-Timestamp != Unix-Timestamp.

    Abgesehen von der Formatierung und der Art der Speicherung....gibt es zwischen diesen beiden einen performanten Unterschied?
  16. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    Ah danke. =)

    Wenn ich mir das so durchlese, wird's wohl der MySQL Timestamp werden.
    Hab dann soweit keine Fragen mehr zu dem Thema, denke hier kann man closen. :prost:
  17. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!