2011-03-24 22 views
52

Bueno, tengo un problema extraño mientras convertir de marca de tiempo Unix a la representación humana usando javascriptmarca de hora a formato legible por humanos

Aquí es marca de tiempo

1301090400 

Ésta 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(); 

I los resultados esperados serán 2011 2, 25 22 00 00. Pero es 2011, 2, 6, 0, 0, 0 ¿Qué extraño?

+3

Hace esto ayuda: http://stackoverflow.com/questions/847185/convert-a-unix-timestamp-to-time-in-javascript –

+0

Es lo mismo que hago – georgevich

+0

Intenté esto en Firefox Firebug consola y obtuvo el resultado esperado. ¿Qué navegador/sistema operativo estás usando? – andrewmu

Respuesta

73

getDay() devuelve el día de la semana. Para obtener la fecha, use date.getDate(). getMonth() recupera el mes, pero el mes está basado en cero, por lo que usar getMonth()+1 debería darle el mes correcto. El valor de tiempo parece estar bien aquí, aunque la hora es 23 aquí (GMT + 1). Si desea que los valores universales, añadir UTC a 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] 
+1

Sugerir ayuda con la fecha, pero todavía no puedo averiguar lo que está mal con horas, minutos y segundos – georgevich

+6

@george no te pierdas nada. Esos valores son enteros, por lo que no pueden tener un valor como "00". Puede agregarlo usted mismo fácilmente, por ejemplo 'minute = (minute <10?" 0 ":" ") + minute;' –

+0

@georgevich: ¿en qué zona horaria está usted? ¿Qué sucede si usa 'date.getUTCHours()'? – KooiInc

7

horas, minutos y 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 añadir el desplazamiento a la hora de crear la fecha GMT zona horaria:

var d = new Date(); 
date = new Date(timestamp*1000 + d.getTimezoneOffset() * 60000) 
+0

¡JavaScript distingue entre mayúsculas y minúsculas! – VisioN

+0

Debe haber sido un error tipográfico, ¡disculpe las molestias! – Hossein

+0

¿Por qué marca de tiempo multiplicada por 1000? –

22
var newDate = new Date(); 
newDate.setTime(unixtime*1000); 
dateString = newDate.toUTCString(); 

Dónde unixtime es el tiempo que devuelve su base de datos SQL. Aquí hay un fiddle si ayuda.

Por ejemplo, usarlo para la hora actual:

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

+4

2012-05-28T02: 47: 59Z –

+0

Encontré esta respuesta, y la respuesta aceptada aquí [* .toString()] es útil: http://stackoverflow.com/questions/13622142/javascript-to- convertir-UTC-a-tiempo local de aquí es una esencia: https://gist.github.com/victoriastuart/b9fb09b890ef88755538b24b0207fece –

+1

' "unixtime está definido"' es lo que estoy haciendo aquí – Kayvar

5

aquí es la respuesta de kooilnc w/acolchado de 0

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; 
} 
+0

¡Bonito! Gracias. –

1

uso Date.prototype.toLocaleTimeString() como se documenta here

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

Cuestiones relacionadas