¿Como puedo optener la hora local?

Iniciado por SrTrp, 29 Abril 2020, 00:56 AM

0 Miembros y 1 Visitante están viendo este tema.

SrTrp

Bueno quiero saber que hora es desde donde visita la pagina, por ejemplo si alguien de España entra quiero saber su hora que es allá, y si entra alguien en estados unidos también quiero su hora local de donde es.
Se que se puede hacer así pero sería algo tedioso o si es la única forma, que alguien me diga como puedo saber desde que pais visita la pagina.
Código (php) [Seleccionar]

$hora = new DateTime("now", new DateTimeZone('America/New York'));
echo $hora->format('G');

#!drvy

#1
Con "now" no obtienes la hora local del visitante, obtienes la hora local del servidor. PHP por si mismo, no sabe la hora local del visitante porque no se comunica con el de ninguna forma, todo código PHP se ejecuta ANTES de que el visitante vea algo.

De más fiable a menos fiable:

1. Puedes usar javascript y hacer una petición Ajax para indicarle la hora a PHP o simplemente setear una cookie y leerla con PHP.


2. Puedes mirar a ver de donde es la IP del visitante y usar la hora según su localización. Aquí asumes que la IP desde la que se conecta el visitante tiene una localización aproximada cerca de el, lo cual no tiene porque ser cierto si usa una VPN o está en un país con múltiples zonas horarias y su nodo de salida esta en otra zona horaria.


3. Puedes obtener la cabecera Accept-Language que suele proporcionar el navegador y asumir la hora basándonos en el idioma que proporciona el navegador. Por ejemplo, si proporciona es-ES seguramente esté en España. La putada de esto ultimo son países con múltiples zonas horarias (Canada por ejemplo o Estados Unidos).

Saludos

SrTrp

No entendí de la primera forma, supongo que dices para que me de la hora en tiempo real, pero pues solo quiero saberla al momento que ingresa a la pagina por ejemplo cada vez que relogee la pagina quiero saberla, lo que tengo pensado hacer un modo oscuro automatizado, si ya es noche poner un fondo oscuro y de lo contrario blanco, y de la 2da forma si me di una idea pero se haría algo tedioso lo único que se me ocurre para que sea menos asignarle una hora especifica a cada continente para evitar si es de mexico o argentina, o así.

@XSStringManolo

#3
Puedes hacerlo directamente desde javascript en el navegador sin hacer la petición al servidor de la siguiente forma:
Código (javascript) [Seleccionar]
new Date().getHours() > 19 ? ActivarModoNoche() : "nada" ;

function ActivarModoNoche() {
/* Aquí haces lo que quieras, ya sea cambiar el color del background o lo que tengas pensado. Ej:
document.body.style.backgroundColor = "#000"; */
}