von JSON date zu PHP Datum?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
code
date
datum
form
genau brauche
interne funktion
interner funktion
komma
konvention
machen
millisekunde
normales datum
parameter
problem
re
umwandeln
umwandlung
umweg
url
zufall
-
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 ?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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
-
tags schrieb:
yo mey jein ;) json dateformat ist so:
... 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 ?
das heißt:/Date(+/-dd...dd+/-zzzz)/
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
weil dann der parameter 6 womöglich nicht stimmt!$jdx = substr($shopitem->LastUpdate,6,-7);
tags schrieb:
wohl wohl ;) das sind ja wahrhaftig die millisekunden!
... das dieses JSON Datum auf 000 endet ist hier auch nur Zufall, ...
leider nein, aber es geht doch ;)
... 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
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):
das gibt dann in etwa so etwas aus:<?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)/'; }
-1341541380008
008
+0200
1927-06-28 22:37:00.008+0200
Beitrag zuletzt geändert: 10.7.2012 0:45:41 von czibere -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage