Necesito una funcion php o javascript (Preferiblemente PHP), para convertir una fecha en formato dd/mm/yyyy hh/mm/ss con zona horaria de Madrid a la zona horaria del usuario.
entre Desarrolladores
Recibe ayuda de expertos
Registrate y pregunta
Es gratis y fácil
Recibe respuestas
Respuestas, votos y comentarios
Vota y selecciona respuestas
Recibe puntos, vota y da la solución
Pregunta
Funcion para convertir fecha a la zona horaria del usuario
- preguntó
- Web
- 3105 Vistas
- 1 Respuestas
- abierta
1 Respuesta
Si quieres hacer cuentas con la zona horaria del usuario, tendrás que usar javascript (ya que el código PHP se ejecuta en el servidor, que puede estar en una zona horaria distinta).
Si tu fecha tiene un formato "estándar", podrás utilizar las funciones básicas de javascript Date.parse(...), pero en tu caso, el formato parece que no es estándar.
Para parsear la fecha "10/12/2013 a las 12:25:59", podrías usar:
var dateString = "10/12/2013 a las 12:25:59";
var reggie = /(\d{2})\/(\d{2})\/(\d{4}) a las (\d{2}):(\d{2}):(\d{2})/;
var dateArray = reggie.exec(dateString);
var dateObject = new Date(
(+dateArray[3]),
(+dateArray[2])-1, // Los meses empiezan con 0!
(+dateArray[1]),
(+dateArray[4]),
(+dateArray[5]),
(+dateArray[6])
);
Si tu formato de fecha fuera, como pones en el enunciado, "dd/mm/yyyy hh/mm/ss", entonces tendrías que sustituir reggie por:
var reggie = /(\d{2})\/(\d{2})\/(\d{4}) (\d{2})\/(\d{2})\/(\d{2})/;
Con esto, estarías utilizando la zona horaria por defecto, si quieres ajustar los valores teniendo en cuenta la zona horaria, tendrías que hacer algo así:
var fechaFinal = new Date(dateObject.getTime() + (dateObject.getTimezoneOffset() + 60) * 60 * 1000);
Donde el 60 que se le suma al timezone offset es 60, porque son los minutos de diferencia entre CET y UTC (en verano será 120).
Para terminar te comento que creo que te estás complicando la vida con tanto parseo y formateo. Al trabajar con diferentes zonas horarias, es más práctico guardar siempre la hora UTC, que no depende de zonas horarias ni de verano/invierno, incluso puedes guardarlo en formato milisegundos, en lugar de fecha completa. Luego las conversiones son mucho más fáciles (si lo tuvieras en milisegundos, simplemente tendrías que hacer "new Date(dateEnMilis)" y ya tendrías la zona horaria del cliente.
Por favor, accede o regístrate para añadir un comentario.
Por favor, accede o regístrate para responder a esta pregunta.
En el blog
-
- 689594
- 1
- Jul 5, 2015
Sin Respuesta
-
- 84
- 0
- Oct 18
-
- 166
- 0
- Jul 9
-
- 535
- 1
- Mar 19
-
- 410
- 2
- Feb 26
-
- 4735
- 0
- Nov 7, 2023
-
- 479
- 0
- Sep 19, 2023
-
- 464
- 0
- Ago 21, 2023
-
- 637
- 0
- May 14, 2023
- ver todas
Preguntas relacionadas
- PHP antiguo a PHP 5.5.11
- Problema con date_default_timezone_set en include
- necesito obtener la fecha del sistema para compararla con la de un campo type="date" en php
- ¿Como hago para mostrar contenido dependiendo del usuario en php Orientado a Objetos claro?
- Configuración de la zona horaria en WordPress
Actividad Reciente
alyvrs preguntó Oct 19
Ayuda , necesito mostrar datos creados solo por el…ManHol preguntó Jul 9
pasar un archivo de excel a csv en pythonArtEze respondió Abr 24
Alguien sabe, no me ignorenArtEze seleccionó una respuesta Abr 24
Bajar extensión de Chrome sin actualizar el navega…ArtEze respondió Abr 24
Bajar extensión de Chrome sin actualizar el navega…ArtEze preguntó Abr 24
Bajar extensión de Chrome sin actualizar el navega…ArtEze respondió Abr 24
No me deja instalar OracleArtEze respondió Abr 24
Formulario que guarde los datos de un jsonArtEze comentó Abr 24
Script /boot/ scrapingSantiago2610 comentó Mar 23
Acualizar ChoiceField en django
Ultimas Preguntas
Preguntas relacionadas
- PHP antiguo a PHP 5.5.11
- Problema con date_default_timezone_set en include
- necesito obtener la fecha del sistema para compararla con la de un campo type="date" en php
- ¿Como hago para mostrar contenido dependiendo del usuario en php Orientado a Objetos claro?
- Configuración de la zona horaria en WordPress
Usuarios Top
- Leonardo-Tadei
- 227320 Puntos
- Peter
- 150480 Puntos
- white
- 75880 Puntos
- carlossevi
- 63580 Puntos
- magarzon
- 30650 Puntos
- pregunton
- 20400 Puntos