การประทับเวลาเป็นรูปแบบที่มนุษย์อ่านได้


90

ฉันมีปัญหาแปลก ๆ ในขณะที่แปลงจาก unix timestamp เป็นการแสดงถึงมนุษย์โดยใช้ javascript

นี่คือการประทับเวลา

1301090400

นี่คือจาวาสคริปต์ของฉัน

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

ฉันคาดว่าผลลัพธ์จะเป็น 2011 2, 25 22 00 00 แต่เป็นปี 2011, 2, 6, 0, 0, 0 ฉันคิดถึงอะไร?


3
สิ่งนี้ช่วยได้ไหม
James Hulse

เหมือนกันกับที่ฉันทำ
georgevich

ฉันลองสิ่งนี้ในคอนโซล Firefox Firebug และได้ผลลัพธ์ที่คาดหวัง คุณใช้เบราว์เซอร์ / ระบบปฏิบัติการใด
andrewmu

ฉันสร้าง jsfiddle และดูเหมือนว่าจะทำงานได้ดี: jsfiddle.net/9SUqX (ฉันทดสอบบน Opera)
James Hulse

นี่คือสิ่งที่ฉันได้รับimg841.imageshack.us/i/sc screenshot20110324at113.png
georgevich

คำตอบ:


102

getDay()คืนวันในสัปดาห์ date.getDate()ที่จะได้รับวันใช้งาน getMonth()ดึงข้อมูลเดือน แต่เดือนเป็นศูนย์ดังนั้นการใช้getMonth()+1ควรให้เดือนที่ถูกต้อง ค่าเวลาดูเหมือนจะโอเคที่นี่แม้ว่าชั่วโมงจะอยู่ที่ 23 ที่นี่ (GMT + 1) หากคุณต้องการคุณค่าสากลเพิ่มUTCวิธีการ (เช่น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
คำแนะนำของคุณช่วยบอกวันที่ แต่ฉันยังคิดไม่ออกว่าชั่วโมงนาทีและวินาทีมีอะไรผิดปกติ
georgevich

7
@george คุณไม่พลาดอะไร ค่าเหล่านี้เป็นจำนวนเต็มดังนั้นจึงไม่สามารถมีค่าเช่น "00" ได้ คุณสามารถผนวกด้วยตัวคุณเองได้อย่างง่ายดายเช่นminute = (minute < 10 ? "0" : "") + minute;
เงา Wizard เป็นวัคซีน

@georgevich: คุณอยู่ในเขตเวลาใด จะเกิดอะไรขึ้นถ้าคุณใช้date.getUTCHours()?
KooiInc

1
GMT + 2 ผลลัพธ์ของ date.getUTCHours () คือ 19
georgevich

GMT + 2 เวลาสากล 22 ชม. = 0 ชม. นี่เป็น jsfiddle ใช้ UTC-ค่า: jsfiddle.net/EZFG9
KooiInc

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

unixtimeเวลาที่ส่งคืนโดย sql db ของคุณอยู่ที่ไหน นี่คือซอถ้ามันช่วยได้

ตัวอย่างเช่นใช้สำหรับเวลาปัจจุบัน:

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


ฉันพบคำตอบนี้และ anwer ที่ได้รับการยอมรับที่นี่ [* .toString ()] จะเป็นประโยชน์: stackoverflow.com/questions/13622142/… นี่คือส่วนสำคัญ: gist.github.com/victoriastuart/b9fb09b890ef88755538b24b0207fece
Victoria Stuart

1
"unixtime is undefined"คือสิ่งที่ฉันมาที่นี่
เคธี่

1
อย่างไรก็ตามสามารถเปิดใช้งาน oneliner ได้อย่างง่ายดายnew Date(1480966325 * 1000).toUTCString()
Rozkalns

9

นี่คือคำตอบของ kooilnc ที่มีเบาะ 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;
}

7

ชั่วโมงนาทีและวินาทีขึ้นอยู่กับเขตเวลาของระบบปฏิบัติการของคุณ ใน GMT (UST) เวลา 22:00:00 น. แต่ในเขตเวลาต่างกันอาจเป็นอะไรก็ได้ ดังนั้นให้เพิ่มการชดเชยเขตเวลาลงในเวลาเพื่อสร้างวันที่ GMT:

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

ทำไมประทับเวลาถึง 1,000 ครั้ง
Bruno Gomes

2
@BrunoGomes เขาสมมติว่าการประทับเวลาเป็นวินาทีในขณะที่จาวาสคริปต์ทำในมิลลิวินาที
Brent

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.