Timestamp in formato leggibile dall'uomo


89

Beh, ho uno strano problema durante la conversione da timestamp unix alla rappresentazione umana usando javascript

Ecco il timestamp

1301090400

Questo è il mio 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();  

Mi aspettavo che i risultati fossero il 2011 2, 25 22 00 00. Ma è il 2011, 2, 6, 0, 0, 0 Cosa mi manca?



È lo stesso che faccio io
georgevich

Ho provato questo nella console Firefox Firebug e ho ottenuto il risultato atteso. Quale browser / sistema operativo stai utilizzando?
andrewmu

Ho creato un jsfiddle e sembra funzionare bene: jsfiddle.net/9SUqX (l'ho provato su Opera)
James Hulse

Risposte:


100

getDay()restituisce il giorno della settimana. Per ottenere la data, usa date.getDate(). getMonth()recupera il mese, ma il mese è a base zero, quindi l'utilizzo getMonth()+1dovrebbe darti il ​​mese giusto. Il valore del tempo sembra essere ok qui, anche se l'ora è 23 qui (GMT + 1). Se vuoi valori universali, aggiungi UTCai metodi (es 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
Il tuo suggerimento aiuta con la data, ma non riesco ancora a capire cosa c'è che non va in ore, minuti e secondi
georgevich

7
@george non ti perdi nulla. Questi valori sono numeri interi, quindi non possono avere un valore come "00". Puoi aggiungerlo da solo ad esempiominute = (minute < 10 ? "0" : "") + minute;
Shadow Wizard is Ear For You

@georgevich: in che fuso orario sei? Cosa succede se usi date.getUTCHours()?
KooiInc

1
GMT + 2 Il risultato di date.getUTCHours () è 19
georgevich

GMT + 2, quindi 22 ore di tempo universale = 0 ore di tempo. Ecco un jsfiddle che utilizza i valori UTC: jsfiddle.net/EZFG9 .
KooiInc

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

Dov'è unixtimeil tempo restituito dal tuo SQL db. Ecco un violino se aiuta.

Ad esempio, utilizzandolo per l'ora corrente:

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


Ho trovato questa risposta e la risposta accettata qui [* .toString ()] è utile: stackoverflow.com/questions/13622142/… Ecco una sintesi
Victoria Stuart

1
"unixtime is undefined"è quello che sto ottenendo qui
Katie

1
Ad ogni modo, può essere facilmente trasformato in onelinernew Date(1480966325 * 1000).toUTCString()
Rozkalns

9

ecco la risposta di kooilnc con 0 imbottiti

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

7

Ore, minuti e secondi dipendono dal fuso orario del sistema operativo. In GMT (UST) sono le 22:00:00 ma in diversi fusi orari può essere qualsiasi cosa. Quindi aggiungi l'offset del fuso orario all'ora per creare la data GMT:

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

Perché il timestamp è 1000?
Bruno Gomes

2
@BrunoGomes presume che il timestamp sia in secondi, mentre javascript li fa in millisecondi.
Brent

7

utilizzare Date.prototype.toLocaleTimeString()come documentato qui

si prega di notare l'esempio locale en-US nell'URL.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.