Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

randomuser

[Resolvido] Calcular diferença entre data JS e do Servidor

Recommended Posts

Boa Noite a todos,

 

Estou com problema para calcular a diferença entre horários obtidos de uma variável no Banco de Dados e do horário real do servidor.

 

O código funciona 100% quando faço a comparação entre a data do Banco de Dados e a data optida por "new Date" pelo cliente, mas não retorna resultado algum quando ao invés de usar a data gerada pelo cliente utilizo a data gerada pelo servidor.

 

Segue abaixo o código que estou com problemas, muitos já devem conhecê-lo, é um código de horário "amigável" que ao invés de mostrar a data de postagem mostra "Postado: 2 dias atrás, 1 semana atrás e etc".

 

A data de entrada (date_srt) vai no formato.:

 

2012-04-03T17:38:17Z

 

function humane_date(date_str){
      var time_formats = [
              [60, 'Agora'],
              [90, '1 Minuto'], // 60*1.5
              [3600, 'Minutos', 60], // 60*60, 60
              [5400, '1 Hora'], // 60*60*1.5
              [86400, 'Horas', 3600], // 60*60*24, 60*60
              [129600, '1 Dia'], // 60*60*24*1.5
              [604800, 'Dias', 86400], // 60*60*24*7, 60*60*24
              [907200, '1 Semana'], // 60*60*24*7*1.5
              [2628000, 'Semanas', 604800], // 60*60*24*(365/12), 60*60*24*7
              [3942000, '1 Mês'], // 60*60*24*(365/12)*1.5
              [31536000, 'Meses', 2628000], // 60*60*24*365, 60*60*24*(365/12)
              [47304000, '1 Ano'], // 60*60*24*365*1.5
              [3153600000, 'Anos', 31536000], // 60*60*24*365*100, 60*60*24*365
              [4730400000, '1 Século'], // 60*60*24*365*100*1.5
      ];

      var time = ('' + date_str).replace(/-/g,"/").replace(/[TZ]/g," "),

       dt = new Date,
              seconds = ((dt - new Date(time) + (dt.getTimezoneOffset() * 60000)) / 1000),
              token = ' Atrás',
              i = 0,
              format;

      if (seconds < 0) {
              seconds = Math.abs(seconds);
              token = '';
      }

      while (format = time_formats[i++]) {
              if (seconds < format[0]) {
                      if (format.length == 2) {
                              return format[1] + (i > 1 ? token : ''); // Conditional so we don't return Just Now Atras
                      } else {
                              return Math.round(seconds / format[2]) + ' ' + format[1] + (i > 1 ? token : '');
                      }
              }
      }

      // overflow for centuries
      if(seconds > 4730400000)
              return Math.round(seconds / 4730400000) + ' centuries' + token;

      return date_str;
};

if(typeof jQuery != 'undefined') {
      jQuery.fn.humane_dates = function(){
              return this.each(function(){
                      var date = humane_date(this.title);
                      if(date && jQuery(this).text() != date) // don't modify the dom if we don't have to
                              jQuery(this).text(date);
              });
      };
}

 

No segundo parágrafo, a variável TIME converte a data de entrada para um formato simplificado.:

2012/04/03 17:38:17

 

Minha dúvida (e problema) é o seguinte.:

 

A Diferença entre horário é baseada no horário do Cliente e gostaria de fazer o cálculo baseado no horário do servidor.

 

O Cálculo da diferença de horário é feita em.:

 

dt = new Date,
seconds = ((dt - new Date(time) + (dt.getTimezoneOffset() * 60000)) / 1000),

 

Até onde eu sei o horário obtido por "new Date" retorna o formato.:

Wed Apr 04 2012 00:33:26 GMT-0300

 

Por ASP, criei uma função que obtém o horário do servidor e coloca em um hidden field na página neste mesmo formato "Wed Apr 04 2012 00:33:26 GMT-0300".

 

Consigo usar esse valor para mostrar o resultado mas não consigo utilizá-lo no lugar de "dt = new Date" para usá-lo como base no cálculo da diferença entre as datas. O Script não retorna resultado algum quando faço isso.

 

Alguém sabe me dizer oq estou fazendo de errado e se é possível utilizar uma data "gerada" para este cálculo ?

 

********* EDIT *********************************************************

 

 

Acabei de encontrar o erro. A hora do Servidor estava vindo com o valor vazio, tive que declará-la para poder ser lida na função efetuava o cálculo.

 

Espero que ajude mais alguém.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.