da timestamp a orario locale visitatore

  • Creatore Discussione Creatore Discussione andreto
  • Data di inizio Data di inizio

andreto

Utente Attivo
5 Dic 2012
88
0
0
Ciao a tutti,
nel database inserisco le date in formato timestamp.

Mi piacerebbe che qualsiasi visitatore, anche non registrato, possa vedere la data e l'ora di ogni articolo da me scritto in linea col suo fuso orario.

Posso farlo solo con php o devo per forza passare da javascript?

A pensare che questa variabile globale
PHP:
$_SERVER['HTTP_ACCEPT_LANGUAGE']
fornisce la lingua impostata sul browser del visitatore: it-IT

Se solo ci fosse una variabile globale che al posto di dare la lingua dia il paese Europe/Rome, sarei a buon punto.

Questo perchè con
PHP:
date_default_timezone_set('Europe/Rome');
echo date("d/m/Y H:i e",1460407073);
andrei ad impostare il fuso orario del navigatore.

Come mi consigliate di procedere?

Grazie,
Andrea
 
Se scrivi un articolo in data OGGI, la data rimane sempre quella di oggi... non capisco che vuoi intendere con il "flusso orario". Se memorizzi la data in db, sempre quella sarà... e gli utenti vedranno la data memorizzata...
O non ho capito il tuo problema?
 
Se scrivi un articolo in data OGGI, la data rimane sempre quella di oggi... non capisco che vuoi intendere con il "flusso orario". Se memorizzi la data in db, sempre quella sarà... e gli utenti vedranno la data memorizzata...
O non ho capito il tuo problema?

Probabilmente è un errore di battitura ma io avevo scritto "fuso orario" e non "flusso orario".

Ti spiego meglio,
scrivo un articolo, il mio server è in italia, salvo la data in formato timestamp nel database mysql.
Se io dall'italia vado a leggere l'articolo, trovo ad esempio "scritto il 12/04/2016 alle ore 12.23",
se ci va un utente degli USA legge sempre "scritto il 12/04/2016 alle ore 12.23".

Il problema è che per lui tale orario deve ancora arrivare, per cui vorrei che lui leggesse 6/7 ore in meno così com'è il fuso orario.
Questo deve valere per tutti gli stati, non solo USA ma anche romania, inghilterra, cina ecc...
 
Ultima modifica:
E se usassi 'REMOTE_ADDR' per ottenere l'IP del visitatore e poi dall IP potresti risalire alla nazione di provenienza e quindi al fusorario ?

Inviato dal mio LG-D620 utilizzando Tapatalk
 
E se usassi 'REMOTE_ADDR' per ottenere l'IP del visitatore e poi dall IP potresti risalire alla nazione di provenienza e quindi al fusorario ?

Se scrivi un articolo in data OGGI, la data rimane sempre quella di oggi... non capisco che vuoi intendere con il "flusso orario". Se memorizzi la data in db, sempre quella sarà... e gli utenti vedranno la data memorizzata...
O non ho capito il tuo problema?

Grazie ad entrambi,
alla fine era più semplice di quello che mi immaginavo, troppo semplice da non pensare che funzionasse in questo modo.

Nel DB memorizzo il timestamp in formato UTC,
leggo questo con php e ricevo la data di oggi con 2 ore indietro [-2], orario UTC.
(siamo un'ora avanti rispetto a UTC [+1] e in questo periodo ancora un'ora avanti [+1] per l'ora legale)

Quando passo questo valore a javascript, in AUTOMATICO allinea il timestamp con l'ora impostata sul proprio computer.

Infatti passando lo stesso timestamp a computer con orari diversi si allinea perfettamente.

Ad esempio, scrivo un articolo adesso ore 21:00 in Italia, quando lo leggo vedo ore 21:00;
se sposto il fuso orario del pc facendo finta di essere a New York [GMT -4] [-2] quindi ore 15:00 vedo che l'articolo è stato scritto alle ore 15:00, quindi nello stesso istante.
In Italia questo istante sarebbe le ore 21:00, a New York le ore 15:00.

Probabilmente una spiegazione un po' contorta ma spero di essere stato di aiuto a chi come me avrà questo dubbio...

Pubblico anche lo script che ho creato per approfondire:

PHP:
<?php
$timestamp = 1460574000;
date_default_timezone_set('UTC');
echo 'UTC <br />';
echo date('j/n/Y \o\r\e G:i:s', $timestamp);
echo "<script language=\"JavaScript\">\n"; 
echo "var d = new Date(".$timestamp."*1000);\n";
echo "document.write('<br /><br />');\n";
echo "document.write('LOCALE <br />');\n";
echo "document.write(d.getDate()+'/'+(d.getMonth()+1)+'/'+d.getFullYear()+' ore '+d.getHours()+':'+d.getMinutes()+':'+d.getSeconds());\n";
echo "</script>"; 
?>

Conclusioni:
Pensavo che Date() in questo caso JS, dato il timestamp restituisse la data UTC invece allinea il tutto con l'orario del PC, il Date() di PHP invece allinea il timestamp con l'orario del server, infatti ho dovuto utilizzare date_default_timezone_set('UTC') per avere l'orario UTC invece di quello del server.
 
Ultima modifica:

Discussioni simili