Stempel waktu ke format yang dapat dibaca manusia

89

Saya punya masalah aneh saat mengonversi dari unix timestamp ke representasi manusia menggunakan javascript

Berikut stempel waktunya

1301090400

Ini adalah javascript saya

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

Saya mengharapkan hasil menjadi 2011 2, 25 22 00 00. Tapi 2011, 2, 6, 0, 0, 0 Apa yang saya lewatkan?

georgevich
sumber
3
Apakah ini membantu: stackoverflow.com/questions/847185/…
James Hulse
Ini sama dengan apa yang saya lakukan
georgevich
Saya mencoba ini di konsol Firefox Firebug dan mendapatkan hasil yang diharapkan. Browser / OS mana yang Anda gunakan?
andrewmu
Saya membuat jsfiddle dan tampaknya berfungsi dengan baik: jsfiddle.net/9SUqX (saya uji di Opera)
James Hulse
Inilah yang saya dapatkan img841.imageshack.us/i/screenshot20110324at113.png
georgevich

Jawaban:

101

getDay()mengembalikan hari dalam seminggu. Untuk mendapatkan tanggal, gunakan date.getDate(). getMonth()mengambil bulan, tetapi bulan berbasis nol, jadi menggunakan getMonth()+1akan memberi Anda bulan yang tepat. Nilai waktu tampaknya baik-baik saja di sini, meskipun di sini jam 23 (GMT + 1). Jika Anda menginginkan nilai universal, tambahkan UTCke metode (mis. 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
sumber
1
Anda menyarankan bantuan dengan tanggal, tetapi saya masih tidak tahu apa yang salah dengan jam, menit, dan detik
georgevich
7
@george Anda tidak melewatkan apa pun. Nilai tersebut adalah bilangan bulat, jadi tidak boleh memiliki nilai seperti "00". Anda dapat menambahkannya sendiri dengan mudah misalnyaminute = (minute < 10 ? "0" : "") + minute;
Shadow Wizard is Ear For You
@georgevich: di zona waktu apa Anda? Apa yang terjadi jika Anda menggunakan date.getUTCHours()?
KooiInc
1
GMT + 2 Hasil dari date.getUTCHours () adalah 19
georgevich
GMT + 2, jadi waktu universal 22 jam = 0 jam waktu Anda. Berikut adalah jsfiddle menggunakan nilai-nilai UTC: jsfiddle.net/EZFG9 .
KooiInc
48
var newDate = new Date();
newDate.setTime(unixtime*1000);
dateString = newDate.toUTCString();

Di mana unixtimewaktu yang dikembalikan oleh sql db Anda. Ini biola jika bisa membantu.

Misalnya, menggunakannya untuk waktu saat ini:

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

Shouvik
sumber
Saya menemukan jawaban ini, dan jawaban yang diterima di sini [* .toString ()] berguna: stackoverflow.com/questions/13622142/… Berikut intinya: gist.github.com/victoriastuart/b9fb09b890ef88755538b24b0207fece
Victoria Stuart
1
"unixtime is undefined"adalah apa yang saya dapatkan di sini
Katie
1
Bagaimanapun, ini dapat dengan mudah diaktifkan di onelinernew Date(1480966325 * 1000).toUTCString()
Rozkalns
9

berikut adalah jawaban kooilnc w / padded 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;
}
golakers
sumber
7

Jam, menit, dan detik tergantung pada zona waktu sistem operasi Anda. Di GMT (UST) itu 22:00:00 tetapi di zona waktu yang berbeda bisa apa saja. Jadi tambahkan perbedaan zona waktu ke waktu untuk membuat tanggal GMT:

var d = new Date();
date = new Date(timestamp*1000 + d.getTimezoneOffset() * 60000)
Hossein
sumber
Mengapa cap waktu dikalikan 1000?
Bruno Gomes
2
@BrunoGomes dia mengasumsikan stempel waktu dalam detik, sementara javascript melakukannya dalam milidetik.
Brent
7

gunakan Date.prototype.toLocaleTimeString()seperti yang didokumentasikan di sini

harap perhatikan contoh lokal en-US di url.

perjuangan4life
sumber