วิธีแปลงวันที่เป็นเวลาประทับ?


165

26-02-2012ฉันต้องการที่จะแปลงวันที่จะประทับเวลาการป้อนข้อมูลของฉันคือ ฉันใช้

new Date(myDate).getTime();

มันบอกว่า NaN .. ใครช่วยบอกวิธีการแปลงนี้ได้บ้าง?



คุณอาจต้องการดูที่ห้องสมุดdate.js
rsbarro

1
คุณใช้Date(myDate).getTime()(สิ่งที่คุณทำเครื่องหมายไว้เป็นรหัส) หรือคำว่า "ใหม่" ก่อนหน้านั้นหมายถึงเป็นส่วนหนึ่งของรหัสหรือไม่ ยิ่งคุณพยายามมากเท่าไหร่คำตอบที่ได้รับก็จะยิ่งดีขึ้นเท่านั้น
TJ Crowder

@rsbarro: ดูเหมือนว่ามันจะไม่ได้รับการบำรุงรักษาอีกต่อไป (และมีข้อบกพร่องที่โดดเด่น) MomentJSดูค่อนข้างดี
TJ Crowder

@TJCrowder ฉันเคยใช้ date.js แล้วและมันก็ใช้ได้ผลกับสิ่งที่ฉันต้องการ แต่คุณคิดว่ามันใช้งานไม่ได้ในบางครั้ง ฉันจะตรวจสอบสักครู่ ขอบคุณ!
rsbarro

คำตอบ:


203
var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+","+myDate[0]+","+myDate[2];
console.log(new Date(newDate).getTime());​

ปรับปรุง:

var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+"/"+myDate[0]+"/"+myDate[2];
console.log(new Date(newDate).getTime());

DEMO (ทดสอบใน Chrome, FF, Opera, IE และ Safari)


น่าเสียดายที่นี่ใช้งานไม่ได้ใน Safari5 เพราะมันจะกลับNaNมา ใน Safari คุณต้องใช้ตัวสร้างอื่น ๆ ที่เป็นไปได้new Date(year, month, day);เกี่ยวกับตัวอย่างนี้:new Date(myDate[2], myDate[1], myDate[0]);
insertusernamehere

13
แทนที่จะแปลงสตริงวันที่จากรูปแบบ "ยุโรป" เป็น "อเมริกัน" จะเป็นการดีกว่าที่จะแปลงเป็นรูปแบบ ISO 8601 ( YYYY-MM-DD) ซึ่งรับประกันได้ว่าจะเข้าใจได้Date()และโดยทั่วไปแล้วเป็นรูปแบบที่ทำงานร่วมกันมากที่สุดของสตริงวันที่
วอลเตอร์ Tross

3
หมายเหตุ: new Date(newDate).getTime()จะสร้างการประทับเวลาเป็นความละเอียดมิลลิวินาที
h7r

3
ใช้เป็นวินาที: Math.floor(new Date(newDate).getTime() / 1000)
metamagikum

54

ลองใช้ฟังก์ชั่นนี้โดยใช้วิธีDate.parse ()และไม่ต้องการตรรกะที่กำหนดเอง:

function toTimestamp(strDate){
   var datum = Date.parse(strDate);
   return datum/1000;
}
alert(toTimestamp('02/13/2009 23:31:30'));


24

รหัส refactored นี้จะทำมัน

let toTimestamp = strDate => Date.parse(strDate)

สิ่งนี้ใช้ได้กับเบราว์เซอร์ที่ทันสมัยทั้งหมดยกเว้น ie8-


10

มีสองปัญหาที่นี่ ก่อนอื่นคุณสามารถโทร getTime บนอินสแตนซ์ของวันที่เท่านั้น คุณจำเป็นต้องใส่ Date ใหม่ในวงเล็บหรือกำหนดให้กับตัวแปร

ประการที่สองคุณจะต้องผ่านสตริงในรูปแบบที่เหมาะสม

ตัวอย่างการทำงาน:

(new Date("2012-02-26")).getTime();

1
ไม่จำเป็นต้องตัดวันที่ในวงเล็บทันที จำเป็นต้องใช้รูปแบบสตริงที่เหมาะสมเท่านั้น
maswerdna

5

คุณเพียงแค่ต้องการย้อนกลับหลักวันที่ของคุณและเปลี่ยน-ด้วย,:

 new Date(2012,01,26).getTime(); // 02 becomes 01 because getMonth() method returns the month (from 0 to 11)

ในกรณีของคุณ:

 var myDate="26-02-2012";
 myDate=myDate.split("-");
 new Date(parseInt(myDate[2], 10), parseInt(myDate[1], 10) - 1 , parseInt(myDate[0]), 10).getTime();

PS UK locale ไม่สำคัญที่นี่


รูปแบบวันที่นั้นไม่ถูกต้องและจะไม่สามารถทำงานข้ามเบราว์เซอร์และข้ามสถานที่ได้อย่างน่าเชื่อถือ (เช่นสำหรับฉันใน Chrome ที่มีสถานที่ตั้งของ UK) หากคุณกำลังจะแนะนำรูปแบบแนะนำหนึ่งที่จริงเอกสารการทำงาน
TJ Crowder

ฉันจะได้รับตัวอย่างจากdeveloper.mozilla.org/en/JavaScript/Reference/Global_Objects/... ฉันลืมที่จะทิ้งสาย ตอนนี้มันใช้งานได้
antonjs

2
โอเคอย่างน้อยตอนนี้โค้ดด้านบนไม่ได้ใช้รูปแบบวันที่ที่ไม่ถูกต้อง แต่เป็นเพียงการระบุวันที่ผิดด้วยเหตุผลสองประการ ด้านบนคุณได้กำหนดวันที่ 2 มีนาคม 2014 (คุณมีคำสั่งซื้อที่ไม่เป็นระเบียบ) และถ้าฟิลด์อยู่ในลำดับที่ถูกต้องคุณจะต้องกำหนดวันที่26 มีนาคม 2012 (ค่าเดือนเริ่มต้นที่ศูนย์) แต่เนื่องจาก OP มีสตริงไม่ใช่ชุดของตัวเลขจึงไม่ใช่ทั้งหมดที่มีประโยชน์แม้ว่าคุณจะแก้ไขปัญหาเหล่านั้นแล้ว
TJ Crowder

@TJ Crowder ขอบคุณสำหรับคำแนะนำของคุณ ฉันแก้ไขรหัสตามที่คุณบอกว่าการแปลงสตริงให้เป็นตัวเลข Merci
antonjs

2
ตัวอย่างโค้ดแรกยังคงไม่ถูกต้องและการใช้Numberกับสตริงที่ขึ้นต้นด้วย a 0นั้นเป็นปัญหาสำหรับบางเอ็นจิ้น - ใช้parseIntและระบุ radix
TJ Crowder

5
function getTimeStamp() {
       var now = new Date();
       return ((now.getMonth() + 1) + '/' + (now.getDate()) + '/' + now.getFullYear() + " " + now.getHours() + ':'
                     + ((now.getMinutes() < 10) ? ("0" + now.getMinutes()) : (now.getMinutes())) + ':' + ((now.getSeconds() < 10) ? ("0" + now
                     .getSeconds()) : (now.getSeconds())));
}

4

ในการแปลงวันที่ (ISO) เป็นเวลา Unixฉันลงเอยด้วยตัวประทับเวลา 3 ตัวนานกว่าที่ต้องการดังนั้นปีของฉันจึงอยู่ที่ประมาณ 50k ...

ฉันต้องแบ่งมัน 1,000 ข้อ new Date('2012-02-26').getTime() / 1000


3

สำหรับผู้ที่ต้องการให้มีการประทับเวลาที่อ่านได้ในรูปแบบของ yyyymmddHHMMSS

> (new Date()).toISOString().replace(/[^\d]/g,'')              // "20190220044724404"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -3) // "20190220044724"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -9) // "20190220"

ตัวอย่างการใช้งาน: นามสกุลไฟล์สำรอง /my/path/my.file.js.20190220


3

ในกรณีที่คุณมาที่นี่เพื่อค้นหาการประทับเวลาปัจจุบัน

  var date      = new Date();
  var timestamp = date.getTime();

TLDR:

new Date().getTime();
//console.log(new Date().getTime());

2

สายของคุณไม่ได้อยู่ในรูปแบบที่ว่าDateวัตถุถูกระบุให้จับ คุณจะต้องแยกวิเคราะห์ด้วยตัวเองใช้ไลบรารีการแยกวิเคราะห์วันที่เช่นMomentJSหรือเก่ากว่า (และไม่ได้รับการบำรุงรักษาเท่าที่ฉันบอกได้) DateJSหรือนวดในรูปแบบที่ถูกต้อง (เช่น2012-02-29 ) ก่อนที่จะขอDateให้แยกวิเคราะห์ .

ทำไมคุณถึงได้รับNaN: เมื่อคุณขอnew Date(...)ให้จัดการกับสตริงที่ไม่ถูกต้องมันจะส่งคืนDateวัตถุที่ตั้งค่าเป็นวันที่ไม่ถูกต้อง ( new Date("29-02-2012").toString()ส่งคืน"Invalid date") Calling บนวัตถุวันที่ในผลตอบแทนที่รัฐนี้getTime()NaN


@benvds: เจ๋งขอบคุณ แม้ว่าฉันจะพบความคิดเห็นที่"นอกจากนี้ยังไม่ทำลาย DOM"ค่อนข้างแปลก ... ฉันคาดหวังว่าสิ่งที่พวกเขาหมายถึงคือมันไม่เปลี่ยนDateวัตถุ (ซึ่งไม่มีส่วนเกี่ยวข้องกับ DOM)
TJ Crowder

2
/**
 * Date to timestamp
 * @param  string template
 * @param  string date
 * @return string
 * @example         datetotime("d-m-Y", "26-02-2012") return 1330207200000
 */
function datetotime(template, date){
    date = date.split( template[1] );
    template = template.split( template[1] );
    date = date[ template.indexOf('m') ]
        + "/" + date[ template.indexOf('d') ]
        + "/" + date[ template.indexOf('Y') ];

    return (new Date(date).getTime());
}

0

นักพัฒนารายอื่นได้ให้คำตอบ แต่ในทางของฉันเองคุณสามารถทำได้ทันทีโดยไม่ต้องสร้างฟังก์ชั่นที่ผู้ใช้กำหนดไว้ดังนี้:

var timestamp = Date.parse("26-02-2012".split('-').reverse().join('-'));
alert(timestamp); // returns 1330214400000
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.