Avatar billede tos Praktikant
20. august 2014 - 10:46 Der er 10 kommentarer og
1 løsning

Afkodning af JSON dato (negativ værdi)

Jeg har google'et en del og er simpelthen på bar bund her.
Jeg har et php script som henter data fra en webservice, hvor det jeg får tilbage er et array som indeholder en JSON dato, men værdien er negativ. Hvordan afkoder jeg den?
var_dump ser sådan ud:

["Skematider"]=>
  array(112) {
    [0]=>
    object(stdClass)#24 (6) {
      ["Id"]=>
      int(106741)
      ["Tidssaet"]=>
      int(104260)
      ["Lektionsnr"]=>
      int(10)
      ["Ugedag"]=>
      int(7)
      ["Starttidspunkt"]=>
      string(22) "/Date(-6847763400000)/"
      ["Sluttidspunkt"]=>
      string(22) "/Date(-6847761600000)/"

    }
Avatar billede DocDong Nybegynder
20. august 2014 - 10:59 #1
Det ser ud som om, at din webservice svarer noget forkert - eller at du spørger på en forkert måde?

Har du noget kode man kan se?
Avatar billede tos Praktikant
20. august 2014 - 11:12 #2
DocDong: Jeg har snakket med dem der har lavet services og de siger at mange andre bruger den webservice, så det burde virke. Jeg skal hente med curl (siger de)

----- php kode - snip ---------------
function httpGet($url,$params)
{
    $ch = curl_init(); 

    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'X-Username:'.$params["licens"],
    'X-Password:'.$params["password"]
    ));
    $output=curl_exec($ch);

    curl_close($ch);
    return $output;
}

$url     = "https://servername.net/REST/usercode/Skema?grade=".$params["grade"];

$rest = httpGet($url,$params);
$skema_result = json_decode($rest);
var_dump($skema_result);
----- php kode - snip ---------------
Avatar billede DocDong Nybegynder
20. august 2014 - 11:14 #3
Ahh!!!

JSON angiver tid i millisekunder, hvor PHP forventer at det er i sekunder.

Så hvis du dividerer din negative værdi med 1000, skulle du være flyvende.

date_default_timezone_set('Europe/Copenhagen');
$jsonTime = -6847763400000;
$phpTime = $jsonTime/1000;
print $jsonTime;
print "<br />";
print $phpTime;
print "<br />";
print date('d-m-Y',$phpTime);


Det giver så i det her tilfælde en dato der hedder 01-01-1753 ??
Avatar billede erikjacobsen Ekspert
20. august 2014 - 11:38 #4
Sjovt problem ... Hvad er den rå JSON, der kommer fra den der webservice ?
Avatar billede tos Praktikant
20. august 2014 - 11:39 #5
den rå værdi er:
/Date(-6847763400000)/
Avatar billede erikjacobsen Ekspert
20. august 2014 - 11:57 #6
Ja, det er råt :)

Det er jo det ret omdiskuterede standard format i JSON, som også kan have en tidszone tilføjet. Det er et godt spørgsmål om dette bør være standarden. Men det er en anden sag.


Hvis 1. januar 1753 er korrekt, så er det jo godt nok. Ellers vil jeg mene at de konkrete data, som du læser er forkerte - en NULL eller "ikke-værdi", som så bliver opfattet som 1753.

Ca. hvilket år burde det give?
Avatar billede tos Praktikant
20. august 2014 - 12:07 #7
datoen skulle være 19-08-2014 :)
Avatar billede erikjacobsen Ekspert
20. august 2014 - 12:21 #8
I går ved den her tid i millisecs: 1408443637000
Avatar billede erikjacobsen Ekspert
20. august 2014 - 12:24 #9
Og de værdier er så langt fra hinanden, så der "kun" er tilbage
1) Der er putter forkerte værdier ind (fx byttet om på dag-måned-år-timer-minutter)
2) Der er en "ikke-værdi" i databasen, måske pga 1)
3) Udtrækket er forkert.

3)-eren er ikke sandsynlig, da systemet tilsyneladende bruges af andre.
Avatar billede tos Praktikant
20. august 2014 - 13:17 #10
ahhh... det er tidspunkt :)

$jsonTime = -6847763400000;
$phpTime = $jsonTime/1000;
print "jsonTime: ". $jsonTime;
print "\n";
print "phpTime: " .$phpTime;
print "\n";
print date('H-i-s',$phpTime);

giver:
jsonTime: -6847763400000
phpTime: -6847763400
12-30-00
Avatar billede DocDong Nybegynder
20. august 2014 - 15:07 #11
Det står der jo også! :D

Det var en snyder...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester