Problema # 1
Il problema principale è nel vostro passo conversione utilizzando strtotime
. PHP cerca di indovinare la relazione tra la stringa temporale e il fuso orario (probabilmente usando il fuso orario), ma nella tua situazione ha bisogno di sapere di più per indovinare correttamente. Puoi farlo indicando esplicitamente a PHP che la stringa temporale è rappresentata come GMT (Greenwich Mean Time).
Poiché il database ha solo il formato di AAAA-MM-GG HH: MM: SS, è possibile concatenare l'identificatore GMT necessario durante l'invocazione strtotime
.
$time = strtotime('2013-07-19 10:12:56' . ' GMT');
Ad esempio:
<pre>
<?php
$time = strtotime('2013-07-19 10:12:56' . ' GMT');
echo("Converting to UNIX Time: $time\n");
echo("Converting to JS Time: ");
echo ($time*1000);
?>
</pre>
Conversione in UNIX Tempo: 1.374.228,776 mila
Conversione JS Tempo: 1374228776000
incollando il conseguente tempo di UNIX in risultati Epoch Converter correttamente in GMT: Fri, 19 Jul 2013 10:12:56 GMT
Problema # 2
Modifica del codice PHP come sopra è necessario, ma dal momento che non è completamente funzionante per voi, posso vedere che avete un problema più in corso. (Sebastian ha cercato di aiutarti con questo.)
Quello che vorrei aggiungere ai commenti di Sebastian è che le impostazioni globali devono essere configurate PRIMA di creare qualsiasi grafico o oggetto grafico nel tuo JavaScript. Altrimenti non avranno alcun effetto sull'output di quei grafici. Quindi è necessario assicurarsi che la seguente configurazione sia applicata prima dello qualsiasi oggetto grafico presente nel codice.
Highcharts.setOptions({
global: {
useUTC: false
}
});
(Se non si utilizza questa configurazione, i grafici saranno ancora funzionare bene, ma date e gli orari mostreranno rispetto al Greenwich Mean Time invece che il fuso orario locale per ogni utente che visualizza le classifiche.)
discussione (posizionato in seguito per coloro che odiano la discussione non devono leggerlo):
ho verificato che se siete a seguito del già modifica suggerita al vostro codice PHP, quindi ora avete la corretta UTC/L'ora numerica GMT passata a JavaScript. È possibile confermare questo 100% di sicuro con il seguente codice:
Date.UTC(2013, 6, 19, 10, 12, 56)
1374228776000
new Date(1374228776000).toUTCString()
"Mon, 19 Aug 2013 10:12:56 GMT"
Il secondo problema che si sta apparentemente di fronte è duplice: rendere Highcharts interpretano correttamente questo come un valore/GMT UTC piuttosto che un valore da qualche altra (come locale) fuso orario, E dicendo Highcharts per produrre correttamente il fuso orario nel formato desiderato.
Fare Highcharts correttamente interpretare i numeri di tempo: Con Highcharts predefinite assume i dati in tempo numerici come queste sono in UTC [[1.331.028 milioni, 5], [1.331.031,6 milioni, 6], [1.331.035,2 milioni, 4]]. A meno che non ci sia qualcosa di strano in agguato nel tuo JavaScript e che altera il modo in cui i dati temporali vengono elaborati, dovresti essere bravo a riguardo.
Highcharts Fare visualizzano l'ora esatta nelle date leggibili sulle carte: è qui che si dovrebbe svolgere molta attenzione alla API qui: http://api.highcharts.com/highcharts#global.useUTC
A proposito, Sebastian Bochan è membro di il team di supporto di Highcharts, quindi puoi fidarti dei suoi commenti.
Hai provato a disabilitare il tempo UTC (http://api.highcharts.com/highstock#global.useUTC) –
Sì, ma la sua ancora in 7h il futuro. var highchartsOptions = Highcharts.setOptions (Highcharts.theme, { globale: {useUTC: false}}); – DevilCode
Il suo strano perché quando eseguo la nuova data (1374253976000) è anche dati corretti (come i vostri). –