Timestamp em formato legível por humanos

89

Bem, eu tenho um problema estranho ao converter de carimbo de data / hora unix para representação humana usando javascript

Aqui está o timestamp

1301090400

Este é o meu javascript

var date = new Date(timestamp * 1000);
var year    = date.getFullYear();
var month   = date.getMonth();
var day     = date.getDay();
var hour    = date.getHours();
var minute  = date.getMinutes();
var seconds = date.getSeconds();  

Eu esperava resultados em 2, 25 22 00 00 em 2011. Mas é em 2011, 2, 6, 0, 0, 0 O que estou perdendo?

georgevich
fonte
3
Isso ajuda: stackoverflow.com/questions/847185/…
James Hulse
É o mesmo que eu
Georgevich
Eu tentei isso no console do Firefox Firebug e obtive o resultado esperado. Qual navegador / sistema operacional você está usando?
andrewmu
Eu criei um jsfiddle e parece funcionar bem: jsfiddle.net/9SUqX (eu testei no Opera)
James Hulse
Aqui está o que eu recebo img841.imageshack.us/i/screenshot20110324at113.png
georgevich

Respostas:

100

getDay()retorna o dia da semana. Para obter a data, use date.getDate(). getMonth()recupera o mês, mas o mês é baseado em zero, portanto, o uso getMonth()+1deve fornecer o mês certo. O valor do tempo parece estar ok aqui, embora a hora seja 23 aqui (GMT + 1). Se você quiser valores universais, adicione UTCaos métodos (por exemplo date.getUTCFullYear(), date.getUTCHours())

var timestamp = 1301090400,
date = new Date(timestamp * 1000),
datevalues = [
   date.getFullYear(),
   date.getMonth()+1,
   date.getDate(),
   date.getHours(),
   date.getMinutes(),
   date.getSeconds(),
];
alert(datevalues); //=> [2011, 3, 25, 23, 0, 0]
KooiInc
fonte
1
Sua sugestão de ajuda com a data, mas ainda não consigo descobrir o que há de errado com horas, minutos e segundos
georgevich
7
@george você não perde nada. Esses valores são inteiros, portanto, não podem ter um valor como "00". Você pode anexá-lo facilmente, por exemplominute = (minute < 10 ? "0" : "") + minute;
Shadow Wizard is Ear For You
@georgevich: em que fuso horário você está? O que acontece se você usar date.getUTCHours()?
KooiInc
1
GMT + 2 O resultado de date.getUTCHours () é 19
georgevich
GMT + 2, então 22h horário universal = 0h seu horário. Aqui está um jsfiddle usando valores UTC: jsfiddle.net/EZFG9 .
KooiInc
47
var newDate = new Date();
newDate.setTime(unixtime*1000);
dateString = newDate.toUTCString();

Onde unixtimeestá o tempo retornado pelo seu sql db. Aqui está um violino, se ajudar.

Por exemplo, usando-o para a hora atual:

document.write( new Date().toUTCString() );

Shouvik
fonte
Achei esta resposta, e a resposta aceita aqui [* .toString ()] para ser útil: stackoverflow.com/questions/13622142/… Aqui está um resumo
Victoria Stuart
1
"unixtime is undefined"é o que estou recebendo aqui
Katie
1
De qualquer forma, pode ser facilmente transformado em onelinernew Date(1480966325 * 1000).toUTCString()
Rozkalns
9

aqui está a resposta de kooilnc com zeros preenchidos

function getFormattedDate() {
    var date = new Date();

    var month = date.getMonth() + 1;
    var day = date.getDate();
    var hour = date.getHours();
    var min = date.getMinutes();
    var sec = date.getSeconds();

    month = (month < 10 ? "0" : "") + month;
    day = (day < 10 ? "0" : "") + day;
    hour = (hour < 10 ? "0" : "") + hour;
    min = (min < 10 ? "0" : "") + min;
    sec = (sec < 10 ? "0" : "") + sec;

    var str = date.getFullYear() + "-" + month + "-" + day + "_" +  hour + ":" + min + ":" + sec;

    /*alert(str);*/

    return str;
}
golakers
fonte
7

Horas, minutos e segundos dependem do fuso horário do seu sistema operacional. No GMT (UST) são 22:00:00, mas em diferentes fusos horários pode ser qualquer coisa. Portanto, adicione a diferença de fuso horário à hora para criar a data GMT:

var d = new Date();
date = new Date(timestamp*1000 + d.getTimezoneOffset() * 60000)
Hossein
fonte
Por que o carimbo de data / hora vezes 1000?
Bruno Gomes
2
@BrunoGomes ele está assumindo que o timestamp está em segundos, enquanto o javascript o faz em milissegundos.
Brent,
7

use Date.prototype.toLocaleTimeString()conforme documentado aqui

observe o exemplo de local en-US no url.

Fight4life
fonte