Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
Carregando comentários...