Marca de tiempo en formato legible por humanos

89

Bueno, tengo un problema extraño al convertir de la marca de tiempo de Unix a la representación humana usando javascript

Aquí está la marca de tiempo

1301090400

Este es mi 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();  

Esperaba que los resultados fueran 2011 2, 25 22 00 00. Pero es 2011, 2, 6, 0, 0, 0 ¿Qué me pierdo?

Georgevich
fuente
3
¿Esto ayuda ?: stackoverflow.com/questions/847185/…
James Hulse
Es lo mismo que yo hago
georgevich
Probé esto en la consola Firefox Firebug y obtuve el resultado esperado. ¿Qué navegador / sistema operativo estás usando?
andrewmu
Creé un jsfiddle y parece funcionar bien: jsfiddle.net/9SUqX (probé en Opera)
James Hulse
Esto es lo que obtengo img841.imageshack.us/i/screenshot20110324at113.png
georgevich

Respuestas:

101

getDay()devuelve el día de la semana. Para obtener la fecha, use date.getDate(). getMonth()recupera el mes, pero el mes se basa en cero, por lo que el uso getMonth()+1debería darle el mes correcto. El valor de tiempo parece estar bien aquí, aunque la hora es 23 aquí (GMT + 1). Si desea valores universales, agregue UTCa los métodos (por ejemplo 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
fuente
1
Su sugerencia de ayuda con la fecha, pero todavía no puedo entender qué está mal con las horas, los minutos y los segundos
georgevich
7
@george no te pierdas nada. Esos valores son números enteros, por lo que no pueden tener un valor como "00". Puede agregarlo usted mismo fácilmente, por ejemplominute = (minute < 10 ? "0" : "") + minute;
Shadow Wizard es Ear For You
@georgevich: ¿en qué zona horaria estás? ¿Qué pasa si usas date.getUTCHours()?
KooiInc
1
GMT + 2 El resultado de date.getUTCHours () es 19
georgevich
GMT + 2, por lo que 22 horas de tiempo universal = 0 horas de tu tiempo. Aquí hay un jsfiddle usando valores UTC: jsfiddle.net/EZFG9 .
KooiInc
48
var newDate = new Date();
newDate.setTime(unixtime*1000);
dateString = newDate.toUTCString();

¿Dónde unixtimees el tiempo devuelto por su sql db. Aquí hay un violín si ayuda.

Por ejemplo, usándolo para el tiempo actual:

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

Shouvik
fuente
Encontré esta respuesta, y la respuesta aceptada aquí [* .toString ()] para ser útil: stackoverflow.com/questions/13622142/… Aquí hay una esencia: gist.github.com/victoriastuart/b9fb09b890ef88755538b24b0207fece
Victoria Stuart
1
"unixtime is undefined"es lo que obtengo aquí
Katie
1
De todos modos, se puede entregar fácilmente en una líneanew Date(1480966325 * 1000).toUTCString()
Rozkalns
9

aquí está la respuesta de kooilnc con ceros acolchados

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
fuente
7

Las horas, los minutos y los segundos dependen de la zona horaria de su sistema operativo. En GMT (UST) son las 22:00:00, pero en diferentes zonas horarias puede ser cualquier cosa. Así que agregue el desplazamiento de la zona horaria a la hora para crear la fecha GMT:

var d = new Date();
date = new Date(timestamp*1000 + d.getTimezoneOffset() * 60000)
Hossein
fuente
¿Por qué la marca de tiempo multiplicada por 1000?
Bruno Gomes
2
@BrunoGomes está asumiendo que la marca de tiempo está en segundos, mientras que javascript lo hace en milisegundos.
Brent
7

utilizar Date.prototype.toLocaleTimeString()como se documenta aquí

tenga en cuenta el ejemplo de configuración regional en-US en la URL.

fight4life
fuente