Znacznik czasu w formacie czytelnym dla człowieka

89

Cóż, mam dziwny problem podczas konwersji z uniksowego znacznika czasu do reprezentacji człowieka za pomocą javascript

Oto sygnatura czasowa

1301090400

To jest mój 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();  

Spodziewałem się, że wyniki to 2011 2, 25 22 00 00. Ale jest rok 2011, 2, 6, 0, 0, 0 Za czym tęsknię?

Georgevich
źródło
3
Czy to pomaga: stackoverflow.com/questions/847185/…
James Hulse
To jest to samo co ja
georgevich
Wypróbowałem to w konsoli Firefox Firebug i uzyskałem oczekiwany wynik. Z jakiej przeglądarki / systemu operacyjnego korzystasz?
andrewmu
Stworzyłem jsfiddle i wydaje się, że działa dobrze: jsfiddle.net/9SUqX (testowałem w Operze)
James Hulse

Odpowiedzi:

101

getDay()zwraca dzień tygodnia. Aby uzyskać datę, użyj date.getDate(). getMonth()pobiera miesiąc, ale miesiąc jest liczony od zera, więc użycie getMonth()+1powinno dać ci właściwy miesiąc. Wydaje się, że wartość czasu jest tutaj w porządku, chociaż tutaj jest godzina 23 (GMT + 1). Jeśli chcesz uniwersalne wartości, dodać UTCdo metod (np 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
źródło
1
Twoja sugestia pomoże z datą, ale nadal nie mogę dowiedzieć się, co jest nie tak z godzinami, minutami i sekundami
georgevich
7
@george niczego nie przegapisz. Te wartości są liczbami całkowitymi, więc nie mogą mieć wartości typu „00”. Możesz łatwo dodać go samodzielnie, na przykładminute = (minute < 10 ? "0" : "") + minute;
Shadow Wizard is Ear For You
@georgevich: w jakiej strefie czasowej jesteś? Co się stanie, jeśli użyjesz date.getUTCHours()?
KooiInc
1
GMT + 2 Wynik date.getUTCHours () to 19
georgevich
GMT + 2, więc 22h czasu uniwersalnego = 0h Twojego czasu. Oto jsfiddle używający wartości UTC: jsfiddle.net/EZFG9 .
KooiInc
48
var newDate = new Date();
newDate.setTime(unixtime*1000);
dateString = newDate.toUTCString();

Gdzie unixtimejest czas zwracany przez twoją bazę danych sql. Oto skrzypce, jeśli to pomaga.

Na przykład, używając go w bieżącym czasie:

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

Shouvik
źródło
Znalazłem tę odpowiedź i zaakceptowaną odpowiedź tutaj [* .toString ()] jako przydatną: stackoverflow.com/questions/13622142/… Oto sedno: gist.github.com/victoriastuart/b9fb09b890ef88755538b24b0207fece
Victoria Stuart
1
"unixtime is undefined"to jest to, co tu dostaję
Katie
1
Zresztą można to łatwo włączyć w onelinerzenew Date(1480966325 * 1000).toUTCString()
Rozkalns
9

tutaj jest odpowiedź kooilnc z wypełnionymi zerami

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
źródło
7

Godziny, minuty i sekundy zależą od strefy czasowej systemu operacyjnego. W GMT (UST) jest 22:00, ale w różnych strefach czasowych może to być wszystko. Dodaj więc przesunięcie strefy czasowej do czasu, aby utworzyć datę GMT:

var d = new Date();
date = new Date(timestamp*1000 + d.getTimezoneOffset() * 60000)
Hossein
źródło
Dlaczego znacznik czasu razy 1000?
Bruno Gomes
2
@BrunoGomes zakłada, że ​​znacznik czasu jest w sekundach, podczas gdy javascript robi to w milisekundach.
Brent
7

używać Date.prototype.toLocaleTimeString()zgodnie z dokumentacją tutaj

proszę zwrócić uwagę na przykład lokalizacji en-US w adresie URL.

walka4life
źródło