kostenloser Webspace werbefrei: lima-city


von JSON date zu PHP Datum?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    tags

    tags hat kostenlosen Webspace.

    Hallo

    ich bekomme per JSON ein ref="/tag/datum">Datum, das anscheinend ein Milisekunden-Timestamp ist

    nach json_decode() bekomme ich sowas:

    => stdClass Object
                    (
                        [Id] => 162
                        [Name] => Blöablabla
                        [LastUpdate] => /Date(1341541380000+0200)/
                   )


    wie komme ich jetzt von
    /Date(1341601020000+0200)/

    auf ein "normales" Datum in der Form YYYY-mm-dd (HH:ii:ss)

    muss ich dazu Umweg machen über

    $jdx = substr($shopitem->LastUpdate,6,-7);
    $jdy = ceil($ldx/1000); 
    $datum = date('Y-m-d (H:i:s)',$jdy);


    oder kann man das "einfacher" (mit PHP-interner Funktion) umwandeln ?

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Dieses Format ist ja eigentlich kein Standardformat, soweit ich weiß, daher hat PHP da auch keine Funktion dazu.

    Dein Code sieht ja mal nicht so schlecht aus. Hier etwas vereinfacht:

    [code]
    $jdx = substr($shopitem->LastUpdate,6,-10);
    $datum = date('Y-m-d (H:i:s)',$jdx);
    [/code]


    Edit: Nach etwas nachdenken streichen wir das besser wieder. :D
    Bleib bei deinem Code nur ohne dem ceil.

    lg
    Philipp

    Beitrag zuletzt geändert: 9.7.2012 1:10:31 von philippkern
  4. Autor dieses Themas

    tags

    tags hat kostenlosen Webspace.

    naja,
    das dieses JSON Datum auf 000 endet ist hier auch nur Zufall,
    daher denke ich ist ceil() schon sinnvoll, sont bekommt man ja als Ergebnis ein float und kein int

    eine Alternative wäre da wohl auch noch mit round() zu arbeiten,
    damit je nach Milisekunden auf- oder ab-gerundet wird (mit 0 Stellen nach dem Komma)
    aber so genau brauche ich das Datum (bzw. die Zeit) garnicht

    aber es wundert mich, dass man dafür ein substr() braucht

    ich habe gehofft, es gibt da eine "direkte" (PHP interne) Funktion zur Umwandlung
    die von so einem JSON Timestamp ein PHP-Timestamp macht, oder gleich ein formatiertes Dateum

    aber wenn nicht, auch kein Problem, so geht's ja auch
  5. tags schrieb:
    ... wie komme ich jetzt von
    /Date(1341601020000+0200)/

    auf ein "normales" Datum in der Form YYYY-mm-dd (HH:ii:ss)

    muss ich dazu Umweg machen über

    $jdx = substr($shopitem->LastUpdate,6,-7);
    $jdy = ceil($ldx/1000); 
    $datum = date('Y-m-d (H:i:s)',$jdy);

    oder kann man das "einfacher" (mit PHP-interner Funktion) umwandeln ?
    yo mey jein ;) json dateformat ist so:
    /Date(+/-dd...dd+/-zzzz)/
    das heißt:
    dd...dd steht für dezimal digits, die für die millisekunden der unix epoch stehen (also UNIX_EPOCH * 1000) UND(!) das ist eine vorzeichenbehaftete zahl (quasi integer), wobei vorgestellt ist entweder '+' oder '-'. das problem ist, dass bei '+' NIX vorgestellt wird, also KEIN '+' (siehe die meinung der philosophie über math [behaftet durch konvention <sehr schlimm!>] ;).
    zzzz ist natürlich die zone.
    was bringt das mit sich? du kannst nicht sagen
    $jdx = substr($shopitem->LastUpdate,6,-7);
    weil dann der parameter 6 womöglich nicht stimmt!

    tags schrieb:
    ... das dieses JSON Datum auf 000 endet ist hier auch nur Zufall, ...
    wohl wohl ;) das sind ja wahrhaftig die millisekunden!

    ... ich habe gehofft, es gibt da eine "direkte" (PHP interne) Funktion zur Umwandlung
    die von so einem JSON Timestamp ein PHP-Timestamp macht, oder gleich ein formatiertes Dateum
    aber wenn nicht, auch kein Problem, so geht's ja auch
    leider nein, aber es geht doch ;)

    daher, eine etwas flexiblere lösung könnte eventuell so aussehen (wobei ich dein json-datetime etwas geändert habe, dass du das ganze richtig siehst):
    <?php
    date_default_timezone_set('Europe/Berlin');
    
    $res  = null;
    $json = new JSonData();
    $res  = explode('(', $json->LastUpdate);
    $res  = explode(')', end($res));
    $res  = reset($res);
    
    echo $k_epoch = (int)$res, '<hr />';  // milisec von unix epoch (also kilo-epoch)
    echo $ms      = substr($k_epoch, -3), '<hr />';  // miliseconds
    echo $tz      = substr($res, -5), '<hr />'; // timezone
    echo date("Y-m-d H:i:s.$ms$tz", $k_epoch/1000), '<hr />'; // datetime assemblieren
    
    class JSonData {
      public $Id = 162;
      public $Name = 'Blöablabla';
      public $LastUpdate = '/Date(-1341541380008+0200)/';
    }
    das gibt dann in etwa so etwas aus:
    -1341541380008
    008
    +0200
    1927-06-28 22:37:00.008+0200


    Beitrag zuletzt geändert: 10.7.2012 0:45:41 von czibere
  6. 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!