Dấu thời gian ở định dạng con người có thể đọc được


89

Tôi gặp sự cố lạ khi chuyển đổi từ dấu thời gian unix sang biểu diễn con người bằng javascript

Đây là dấu thời gian

1301090400

Đây là javascript của tôi

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

Tôi dự kiến ​​kết quả là 2011 2, 25 22 00 00. Nhưng đó là 2011, 2, 6, 0, 0, 0 Tôi bỏ lỡ điều gì?


3
Điều này có giúp ích gì không: stackoverflow.com/questions/847185/…
James Hulse,

Nó cũng giống những gì tôi làm
georgevich

Tôi đã thử điều này trong bảng điều khiển Firefox Firebug và nhận được kết quả như mong đợi. Bạn đang sử dụng trình duyệt / hệ điều hành nào?
andrewmu Ngày

Tôi tạo ra một jsfiddle và nó dường như làm việc tốt: jsfiddle.net/9SUqX (Tôi đã thử nghiệm trên Opera)
James Hulse

Đây là những gì tôi nhận được img841.imageshack.us/i/screenshot20110324at113.png
georgevich,

Câu trả lời:


100

getDay()trả về ngày trong tuần. Để lấy ngày, hãy sử dụng date.getDate(). getMonth()truy xuất tháng, nhưng tháng dựa trên 0, vì vậy việc sử dụng getMonth()+1phải cung cấp cho bạn tháng phù hợp. Giá trị thời gian có vẻ ổn ở đây, mặc dù giờ ở đây là 23 (GMT + 1). Nếu bạn muốn những giá trị phổ quát, thêm UTCcác phương pháp (ví dụ 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
Bạn đề nghị giúp đỡ với ngày, nhưng tôi vẫn có thể t `tìm ra những gì là sai với giờ, phút và giây
georgevich

7
@george bạn không bỏ lỡ bất cứ điều gì. Các giá trị đó là số nguyên, vì vậy không thể có giá trị như "00". Ví dụ, bạn có thể tự mình nối nó một cách dễ dàngminute = (minute < 10 ? "0" : "") + minute;
Shadow Wizard là Ear For You

@georgevich: bạn đang ở múi giờ nào? Điều gì xảy ra nếu bạn sử dụng date.getUTCHours()?
KooiInc

1
GMT + 2 Kết quả của date.getUTCHours () là ngày 19
georgevich

GMT + 2, như vậy 22h giờ quốc tế = 0h giờ của bạn. Đây là một jsfiddle sử dụng giá trị UTC: jsfiddle.net/EZFG9 .
KooiInc

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

Ở đâu unixtimelà thời điểm trả về bởi db sql của bạn. Đây là một fiddle nếu nó giúp.

Ví dụ: sử dụng nó cho thời điểm hiện tại:

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


Tôi đã tìm thấy câu trả lời này và anwer được chấp nhận ở đây [* .toString ()] rất hữu ích: stackoverflow.com/questions/13622142/… Đây là ý chính: gist.github.com/victoriastuart/b9fb09b890ef88755538b24b0207fece
Victoria Stuart

1
"unixtime is undefined"là những gì tôi nhận được ở đây
Katie

1
Dù sao, nó có thể được dễ dàng lại onelinernew Date(1480966325 * 1000).toUTCString()
Rozkalns

9

đây là câu trả lời của kooilnc w / padded 0's

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

Giờ, phút và giây phụ thuộc vào múi giờ của hệ điều hành của bạn. Theo GMT (UST) là 22:00:00 nhưng ở các múi giờ khác nhau, nó có thể là bất kỳ thứ gì. Vì vậy, hãy thêm chênh lệch múi giờ vào thời gian để tạo ngày GMT:

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

Tại sao dấu thời gian lại gấp 1000 lần?
Bruno Gomes

2
@BrunoGomes, anh ấy đang giả định dấu thời gian tính bằng giây, trong khi javascript thực hiện chúng bằng mili giây.
Brent

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.