Foros del Web » Programando para Internet » Javascript »

Fecha con Javascript

Estas en el tema de Fecha con Javascript en el foro de Javascript en Foros del Web. ¡Hola! Pues estoy dándole vueltas a un problema que no acabo yo de averiguar como solucionar. Tengo etiquetas como esta en diferentes puntos de la ...
  #1 (permalink)  
Antiguo 28/09/2014, 05:56
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Fecha con Javascript

¡Hola!

Pues estoy dándole vueltas a un problema que no acabo yo de averiguar como solucionar. Tengo etiquetas como esta en diferentes puntos de la web:

Código HTML:
Ver original
  1. <time data-time="1411912008943"></time>

Lo que hay dentro de ese data-time son los segundos en UTC. Entonces, lo que yo quiero es que desde Javascript y jQuery, cojan esos datos y pongan la fecha dentro de la etiqueta tal que así:

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.      function dataTime(){
  3.           $(function(){
  4.                var now = new Date();
  5.                var utc_seconds = $('time').data('time');
  6.                var utc_seconds_now = Date.UTC(now.getFullYear(),now.getMonth(), now.getDate(), now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds());
  7.                var local_seconds_now = now.getTime();
  8.                var from_utc_to_local = utc_seconds + (utc_seconds_now - local_seconds_now);
  9.                var seconds_ago_local = local_seconds_now - from_utc_to_local; /*Con esto recibiría los segundos que han pasado desde que se publicó el mensaje en hora local*/
  10.                $('time').html(seconds_ago_local);
  11.           });
  12.      }
  13.      setInterval("dataTime()", 60000);
  14. });

Pero no me funciona, ¿qué es lo que ocurre?

Muchas gracias .
  #2 (permalink)  
Antiguo 28/09/2014, 10:09
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Fecha con Javascript

Para empezar, debes de usar el atributo datetime y no crear un pseudo-atributo, como veo que lo haces. Ahora bien, dices que primero quieres tomar ese dato, pues, te basta con usar el método getAttribute:

Código Javascript:
Ver original
  1. document.querySelector("time").getAttribute("datetime");

Ya teniendo el dato, puedes procesarlo y realizar la asignación correspondiente.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 30/09/2014, 09:36
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Fecha con Javascript

Muchas gracias por contestar Alexis pero el problema está en que yo quiero recoger la fecha de de la etiqueta HTML que como tu me has dicho que ponga el atributo dateTime, así lo utilizaré, pero imagínate que en vez de uno, tengo dos:

Código HTML:
Ver original
  1. <time dataTime="1411912008943"></time>
  2. <time dataTime="1411912007943"></time>

Como ves, su dateTime es diferente, uno es 1411912008943 y otro es 1411912007943. Estos dos números son los segundos de la fecha en la que se publicó el mensaje en horario UTC recogidos de la base de datos. Ahora necesito que desde Javascript, recoja cada uno de ellos, los pase a horario local del usuario, y calcule los segundos desde que se escribió el mensaje, y que ponga esos segundos dentro de la etiqueta.
Simplemente eso.

Y tengo dos problemas que no se como resolver en Javascript:
1.- ¿Cómo hago para seleccionar una única etiqueta de esas y hacer todos las acciones, después pasar a otra etiqueta y así con todas?
2.- ¿Para transformar la hora es así como puse arriba anteriormente?

Código Javascript:
Ver original
  1. var now = new Date();
  2. var utc_seconds = $(laetiqueta).data('time');
  3. var utc_seconds_now = Date.UTC(now.getFullYear(),now.getMonth(), now.getDate(), now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds());
  4. var local_seconds_now = now.getTime();
  5. var from_utc_to_local = utc_seconds + (utc_seconds_now - local_seconds_now);
  6. var seconds_ago_local = local_seconds_now - from_utc_to_local; /*Con esto recibiría los segundos que han pasado desde que se publicó el mensaje en hora local*/
  7. $(laetiqueta).html(seconds_ago_local);

Muchas gracias Alexis
  #4 (permalink)  
Antiguo 30/09/2014, 10:34
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Fecha con Javascript

Pues, si deseas procesar el valor de cada etiqueta una a una, tómalas en conjunto por el nombre de la etiqueta y, al conjunto de nodos que formarás con esa selección, lo iteras con un bucle y, en cada iteración, procesas la información de cada etiqueta.

Código Javascript:
Ver original
  1. var elementos = document.getElementsByTagName("time"),
  2.     total = elementos.length;
  3.  
  4. for (var i = 0; i < total; i++){
  5.     var valor = elementos[i].getAttribute("dateTime");
  6.  
  7.     //Acá realizas tus procesos
  8. }

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 06/10/2014, 08:14
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Fecha con Javascript

Vale, he preparado todo y me funciona perfectamente, al principio no me cogía las etiquetas porque se me olvidó ponerlo dentro de la functión $(document).ready(function(){}); de jQuery y me devolvía 0, pero ya lo solucioné y por esa parte funciona.

El problema es el que llega ahora y es el que te planteaba al principio. He puesto una serie de variables para tratar la hora pero lo que quiero es que reciba los segundos de UTC y de la hora local del usuario para conseguir los segundos de diferencia y entonces, después pasarlo a la fecha en UTC en segundos que tengo guardada en la base de datos y que tengo puesta en el atributo "datetime" de las etiquetas "time".

He creado esto, pero no me funciona:

Código Javascript:
Ver original
  1. function dateTime(){
  2.     var elementos = document.getElementsByTagName("time"),
  3.         total = elementos.length,
  4.         now = new Date(),
  5.         local_seconds_now = now.getTime();
  6.     for (var i = 0; i < total; i++){
  7.         var utc_seconds = elementos[i].getAttribute("dateTime"),
  8.         utc_seconds_now = Date.UTC(now.getFullYear(),now.getMonth(), now.getDate(), now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds());
  9.         from_utc_to_local = utc_seconds + (utc_seconds_now - local_seconds_now),
  10.         seconds_ago_local = local_seconds_now - from_utc_to_local;
  11.         elementos[i].innerHTML = seconds_ago_local;
  12.     }
  13. }

Es extraño y me lío, además no sé si estoy utilizando los signos y las funciones correctas.

Muchas gracias
  #6 (permalink)  
Antiguo 06/10/2014, 11:39
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Fecha con Javascript

Veo que manejas tres datos: El tiempo guardado en la etiqueta, el tiempo UTC y el tiempo local, estos dos últimos obtenidos mediante el objeto Date. Luego dices que quieres obtener la diferencia entre el tiempo UTC y el local, pero si tienes tres datos, entonces, ¿la diferencia entre qué tiempos buscas obtener? Porque veo que, al tiempo de la etiqueta, le sumas la diferencia entre el tiempo UTC y el local y luego restas al tiempo local el resultado anterior.

Esto más parece un problema lógico que de programación, de modo que sería mejor que replantees la lógica de tu algoritmo, empezando por hacerte la pregunta: ¿Qué deseo obtener? y luego el: ¿Cómo lo haré?

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 07/10/2014, 11:53
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Fecha con Javascript

Es simple, pero me resulta difícil ponerlo en forma de programación, te lo explico poco a poco.

1.- El usuario crea un mensaje y guardo la fecha en UTC en segundos.

2.- Claro, cuando muestro el mensaje la fecha en UTC en segundos guardada en la base de datos no corresponde con la zona horaria del usuario que por ejemplo vive en EEUU.

3.- Lo que hago es, esa fecha en UTC guardada en segundos en la base de datos, la meto en una etiqueta "time" de ese mensaje y la coloco en el atributo "datetime".

4.- Desde Javascript la recibo y lo que necesito es saber la diferencia en segundos de una la fecha en UTC ahora mismo y la fecha en hora local del usuario ahora mismo para después pasársela a la fecha en segundos que tengo en la base de datos para conseguir la fecha en segundos que se publicó el mensaje.

Si continuas sin pillarlo puedo explicártelo gráficamente y lo entenderás mejor.
Gracias
  #8 (permalink)  
Antiguo 07/10/2014, 12:43
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Fecha con Javascript

A ver. Para obtener el tiempo local (el del usuario) y el UTC, puedes hacer esto:

Código Javascript:
Ver original
  1. var f = new Date(), //Objeto Date
  2.     a = f.getUTCFullYear(), //Año UTC
  3.     m = f.getUTCMonth(), //Mes UTC
  4.     d = f.getUTCDate(), //Día UTC
  5.     tL = f.getTime() / 1000, //Tiempo local en segundos
  6.     tU = Date.UTC(a, m, d) / 1000; //Tiempo UTC en segundos
  7.  
  8. console.log("Local: " + tL.toFixed()); //Tiempo local en segundos sin decimales
  9. console.log("UTC: " + tU.toFixed()); //Tiempo UTC en segundos sin decimales

Ahora, solo te queda restar ambas cantidades y guardarla. Eso es todo.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 07/10/2014 a las 16:53 Razón: Mejora
  #9 (permalink)  
Antiguo 08/10/2014, 16:42
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Fecha con Javascript

buenas,
@ienrique, yo pienso que esta mal calculado. lo que necesitas es conseguir la diferencia entre dos fechas pero de tipo timestamp: el timestamp de la fecha de publicacion del mensaje y el timestamp de la fecha actual. sospecho lo que quieres hacer es obtener el tiempo transcurrido del mensaje al momento actual. o sea, el mensaje se publico hace 5 segundos, por ejemplo.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #10 (permalink)  
Antiguo 27/10/2014, 07:59
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Fecha con Javascript

Gracias a Alexis consigo el tiempo en UTC y local pero no sé como puedo calcular lo que dice Zerokilled...

Cita:
Iniciado por zerokilled Ver Mensaje
buenas,
@ienrique, yo pienso que esta mal calculado. lo que necesitas es conseguir la diferencia entre dos fechas pero de tipo timestamp: el timestamp de la fecha de publicacion del mensaje y el timestamp de la fecha actual. sospecho lo que quieres hacer es obtener el tiempo transcurrido del mensaje al momento actual. o sea, el mensaje se publico hace 5 segundos, por ejemplo.
Sí, es eso exactamente lo que quiero conseguir pero no sé como conseguirlo...
  #11 (permalink)  
Antiguo 27/10/2014, 13:32
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Fecha con Javascript

Si quieres hacerlo de manera temporal, sin guardar datos en la BD, es decir, solo JS, podrías guardar el tiempo en el cual se publica cada mensaje en un pseudo-atributo dentro del elemento en el que muestras a cada mensaje. Luego, con un temporizador, vas restando el tiempo actual con cada uno de los tiempos guardados y muestras la diferencia.

Un pequeño ejemplo:
Código HTML:
Ver original
  1. Mensaje: <textarea></textarea>
  2. <button>Publicar</button>
  3. <div></div>

Código Javascript:
Ver original
  1. var textarea = document.querySelector("textarea"),
  2.     button = document.querySelector("button"),
  3.     div = document.querySelector("div");
  4.  
  5. button.addEventListener("click", function(){
  6.     if (textarea.value.length){
  7.         var p = document.createElement("p"),
  8.             span = document.createElement("span");
  9.         p.innerHTML = textarea.value.replace(/\n+/g, "<br />");
  10.         p.setAttribute("data-time", new Date().getTime());
  11.         p.appendChild(span);
  12.         div.appendChild(p);
  13.         textarea.value = null;
  14.         textarea.focus();
  15.     }
  16. }, false);
  17.  
  18. setInterval(function(){
  19.     var par = div.querySelectorAll("p"),
  20.         len = par.length;
  21.     for (var i = 0; i < len; i++){
  22.         var now = new Date().getTime(),
  23.             then = par[i].getAttribute("data-time"),
  24.             diff = ((now - then) / 1000) / 60,
  25.             span = par[i].querySelector("span");
  26.         span.innerHTML = diff.toFixed() + " minutes ago";
  27.     }
  28. }, 60000);

Cuando pulso el botón para publicar el mensaje, verifico primero que se haya escrito un mensaje (aunque también podrías deshabilitar al botón y habilitarlo cuando se pulse una tecla teniendo el área de texto el enfoque y luego de verificar que tenga contenido) y si esta condición se cumple, creo un párrafo, en el que mostraré el mensaje escrito y un <span>, en donde mostraré el tiempo transcurrido desde la publicación del mensaje. Asigno el contenido del área de texto al párrafo, en el cual reemplazo los saltos de línea por elementos <br /> para que estos sean visibles en el párrafo, creo un pseudo-atributo data-time y le asigno el tiempo actual en milésimas de segundo. Añado el <span> creado al párrafo y este al <div>. Por último, elimino el contenido del área de texto y le doy el enfoque para seguir escribiendo mensajes.

Luego, establezco un temporizador que ejecutará una función cada 60000 milésimas de segundo, lo cual equivale a 60 segundos o 1 minuto. En dicha función, tomo a la colección de párrafos contenidos en el <div> y calculo el total que estos representan, luego, con ayuda de un bucle, recorro a dicha colección. En cada iteración, tomo el tiempo actual en milésimas de segundo, el tiempo guardado en el pseudo-atributo data-time del párrafo actual en la iteración, resto ambas cantidades, tomo al <span> del párrafo y le asigno como contenido el resultado de la resta anterior sin decimales y un texto complementario.

Puedes personalizar esto, por ejemplo, que el temporizador se ejecute en intervalos mayores o menores o que no se muestre la diferencia en minutos sino en segundos u horas o que el tiempo transcurrido se muestre inmediatamente después de publicar el mensaje. Eso lo decides tú. También te sugiero utilizar identificadores para cada elemento, así no habrán conflictos con otros elementos similares, además de validar el texto escrito.

DEMO

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 27/10/2014 a las 13:55 Razón: Mejora
  #12 (permalink)  
Antiguo 28/10/2014, 09:47
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Fecha con Javascript

¡¡Muchísimas gracias Alexis eres un máquina!! Únicamente una cosa, date cuenta que entra gente de distintos husos horarios a mi página entonces, el date-time tiene la fecha en UTC y necesito calcular la diferencia entre la fecha local del usuario y el UTC para decir, "Hace diez minutos", por ejemplo.

¿Qué calculo debería hacer para ello?

Muchísimas gracias, Alexis.
  #13 (permalink)  
Antiguo 28/10/2014, 12:23
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Fecha con Javascript

Particularmente, no me haría problemas con eso. Por ejemplo, en mi país estamos en un huso horario mayor al de la ubicación del servidor de Foros del Web, es por eso que cuando publico algo por acá, aparece como si hubiera sido una hora antes. Sin embargo, para el tema del tiempo transcurrido, no va a afectar en nada pues esos 10 o N minutos habrán transcurrido tanto en el servidor como en la PC del usuario.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #14 (permalink)  
Antiguo 28/10/2014, 13:24
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Fecha con Javascript

por el huso horario no deberías preocuparte. el timestamp es como un horario universal y no se tiene en cuenta la zona horaria. o sea, por ejemplo, digamos un mensaje publicado 1414512000000, y el timestamp actual 1414512600000. la diferencia son diez minutos; indistintamente del huso horario todos deberían ver el mismo tiempo transcurrido cuando se traduce a la hora local.

el timestamp anterior representa la fecha Oct 28, 2014 a las 12pm en mi zona horaria (-4 gmt). pero en canarias por ejemplo, son las 4pm (0 gmt). lo importante es que el usuario tenga configurado correctamente la fecha y zona en su equipo.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #15 (permalink)  
Antiguo 29/10/2014, 09:22
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Fecha con Javascript

Cita:
Iniciado por Alexis88 Ver Mensaje
Particularmente, no me haría problemas con eso. Por ejemplo, en mi país estamos en un huso horario mayor al de la ubicación del servidor de Foros del Web, es por eso que cuando publico algo por acá, aparece como si hubiera sido una hora antes. Sin embargo, para el tema del tiempo transcurrido, no va a afectar en nada pues esos 10 o N minutos habrán transcurrido tanto en el servidor como en la PC del usuario.

Saludos
Cita:
Iniciado por zerokilled Ver Mensaje
por el huso horario no deberías preocuparte. el timestamp es como un horario universal y no se tiene en cuenta la zona horaria. o sea, por ejemplo, digamos un mensaje publicado 1414512000000, y el timestamp actual 1414512600000. la diferencia son diez minutos; indistintamente del huso horario todos deberían ver el mismo tiempo transcurrido cuando se traduce a la hora local.

el timestamp anterior representa la fecha Oct 28, 2014 a las 12pm en mi zona horaria (-4 gmt). pero en canarias por ejemplo, son las 4pm (0 gmt). lo importante es que el usuario tenga configurado correctamente la fecha y zona en su equipo.
El problema es que yo, aparte de querer mostrar el Hace diez minutos, a partir de una semana quiero que me diga El 13 de Octubre a las 15:30 y cuando pase un año El 13 de Octubre a las 15:30 de 2013. Claro, yo esto lo sé hacer pero necesito conseguir los segundos. Mira, este es el código que tengo, haz los pequeños cambios que necesites para así pueda comprobar bien lo que me dices:

http://jsfiddle.net/3dvbjyyq/
  #16 (permalink)  
Antiguo 29/10/2014, 12:52
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Fecha con Javascript

Podrías tomar la fecha y hora local en JS, enviarla al lado del servidor mediante Ajax, guardar dichos datos en la BD y, al cabo de una semana, en lugar de consultar al dato guardado en un pseudo-atributo, realizarías la consulta a la BD.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #17 (permalink)  
Antiguo 30/10/2014, 12:43
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Fecha con Javascript

Cita:
Iniciado por Alexis88 Ver Mensaje
Podrías tomar la fecha y hora local en JS, enviarla al lado del servidor mediante Ajax, guardar dichos datos en la BD y, al cabo de una semana, en lugar de consultar al dato guardado en un pseudo-atributo, realizarías la consulta a la BD.

Saludos
Pero no creo que haga falta tanto, yo tengo guardada la fecha en UTC en la etiqueta time en timestamp, tan solo tengo que coger la hora local y calcular la diferencia entre la hora local y UTC una vez calculada esa diferencia tan solo hay que aplicarsela a la hora en UTC y ya tendría la hora en timestamp cuando se realizó la consulta en hora local. Después tan solo hacer los cálculos para pasar el timestamp a Hace 10 minutos, pero qué cálculos hacer.

Es tal y como lo ha dicho Zerokilled, es eso, solo que no sé como hacerlo.


Saludos y gracias .
  #18 (permalink)  
Antiguo 30/10/2014, 13:12
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Fecha con Javascript

A ver, si dices que luego de una semana quieres mostrar un texto tipo 'Publicado el 30 de marzo a las 20:18 hrs.', no haría falta realizar cálculo alguno (al menos no del que mencionas), bastaría con que, al momento de enviar el comentario para guardarlo en la BD, también envíes la fecha y hora local, los guardes en la BD y, cuando vayas a realizar una consulta en el futuro, verificas si la diferencia entre la fecha actual (la del día en la que realices la consulta) y la fecha guardada es mayor o igual a 7 días; de ser así, muestras esos datos, caso contrario, solo realizas la diferencia del tiempo transcurrido, es decir, para que muestre el mensaje 'Publicado hace X minutos'.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #19 (permalink)  
Antiguo 31/10/2014, 09:18
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Fecha con Javascript

Cita:
Iniciado por Alexis88 Ver Mensaje
A ver, si dices que luego de una semana quieres mostrar un texto tipo 'Publicado el 30 de marzo a las 20:18 hrs.', no haría falta realizar cálculo alguno (al menos no del que mencionas), bastaría con que, al momento de enviar el comentario para guardarlo en la BD, también envíes la fecha y hora local, los guardes en la BD y, cuando vayas a realizar una consulta en el futuro, verificas si la diferencia entre la fecha actual (la del día en la que realices la consulta) y la fecha guardada es mayor o igual a 7 días; de ser así, muestras esos datos, caso contrario, solo realizas la diferencia del tiempo transcurrido, es decir, para que muestre el mensaje 'Publicado hace X minutos'.

Saludos
En la base de datos únicamente guardo la hora en UTC, la hora local ya te la da el ordenador con Javascript, es así como dices, pero, ¿cómo lo hago? No sé que codigo tengo que poner si sumar o si restar u otra cosa para ello.
  #20 (permalink)  
Antiguo 31/10/2014, 11:33
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Fecha con Javascript

No te compliques, simplemente guarda la fecha y hora local, así como la fecha en el servidor. Luego, cada X tiempo, realiza una consulta a la BD, en la cual restarás la fecha del servidor guardada con la fecha actual en el servidor (en el momento de realizar la consulta); si esta es mayor o igual a 1 semana, muestras el mensaje de 'Publicado el 30 de marzo a las 20:18 hrs.', para lo cual, utilizarías los otros dos datos que guardaste, es decir, la fecha y hora local, pero si la diferencia entre las fechas es menor a la semana, tomas la fecha y hora locales que guardaste y las restas con la fecha y hora local actuales (al momento de la consulta), así podrás mostrar el mensaje de 'Publicado hace X minutos'.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #21 (permalink)  
Antiguo 31/10/2014, 12:57
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Fecha con Javascript

Cita:
Iniciado por Alexis88 Ver Mensaje
A ver, si dices que luego de una semana quieres mostrar un texto tipo 'Publicado el 30 de marzo a las 20:18 hrs.', no haría falta realizar cálculo alguno (al menos no del que mencionas), bastaría con que, al momento de enviar el comentario para guardarlo en la BD, también envíes la fecha y hora local, los guardes en la BD y, cuando vayas a realizar una consulta en el futuro, verificas si la diferencia entre la fecha actual (la del día en la que realices la consulta) y la fecha guardada es mayor o igual a 7 días; de ser así, muestras esos datos, caso contrario, solo realizas la diferencia del tiempo transcurrido, es decir, para que muestre el mensaje 'Publicado hace X minutos'.

Saludos
Lo malo es que tengo gente tanto de España como de sudamérica, si yo guardara las cosas en la fecha local de cada uno habría un lío increible porque no serían reales las fechas. Si yo publico un mensaje en España y lo ve uno de EEUU, le pondría que en ese mismo instante se publicó hace "Hace 6 horas" cuando el español lo publicó "Hace unos segundos".

Etiquetas: fecha, funcion, jquery
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:20.