แปลงวันที่ปกติเป็น unix timestamp


113

ฉันจะแปลงวันที่ปกติ2012.08.10เป็น unix timestamp ใน javascript ได้อย่างไร

Fiddle: http://jsfiddle.net/J2pWj/




ฉันเคยเห็นโพสต์มากมายที่นี่ที่แปลงเป็น PHP, Ruby และอื่น ๆ ... แต่ฉันต้องทำสิ่งนี้ภายใน JS



1
คุณลอง newDate.getTime () / 1000 หรือยัง
Gareth Parker

@LokiAstari ใช่ขอโทษ ฉันค้นหา แต่ไม่พบ
สแตน

2
บางทีฉันอาจจะขาดอะไรไป แต่unix timestampเป็นพื้นฐานของวิศวกรรมและวิทยาศาสตร์คอมพิวเตอร์ทั้งหมด หวังว่าจะมีวิธีอำนวยความสะดวกในตัว ตอนนี้ฉันใช้Math.floor((+new Date()) / 1000);
Mars Robertson

คำตอบ:


228
new Date('2012.08.10').getTime() / 1000

ตรวจสอบเอกสารวัน JavaScript


1
ขอบคุณสำหรับหน้าเอกสารที่ฉันทำในสิ่งที่ต้องการ
สแตน

37
Math.floor it or its not a unix timestamp (มันจะมีทศนิยม)
BT

@ fguillen Mooseman ฉันเรียกใช้และตรวจสอบรหัสนี้ เมื่อฉันแปลงการประทับเวลาของยูนิกซ์เป็นวันที่มันจะให้ฉันเป็น 2012.08.09 แทนที่จะเป็น 2012.08.10 ทำไมถึงเป็น .. ?
WP Learner

1
@ user2584538 ดูคำตอบของฉันด้านล่าง คุณต้องลบทศนิยม
theVinchi

1
เวลา @Mentor UNIX วัดเป็นวินาทีไม่ใช่มิลลิวินาที
Nicu Surdu

62
parseInt((new Date('2012.08.10').getTime() / 1000).toFixed(0))

สิ่งสำคัญคือต้องเพิ่มtoFixed(0)เพื่อลบทศนิยมเมื่อหารด้วย 1,000 เพื่อแปลงจากมิลลิวินาทีเป็นวินาที

.getTime()ฟังก์ชันส่งกลับประทับเวลาในหน่วยมิลลิวินาที แต่ timestamps ยูนิกซ์ที่แท้จริงอยู่เสมอในไม่กี่วินาที


5
เพียงระวังว่าสิ่งนี้ส่งคืนสตริงไม่ใช่ตัวเลข
Capaj

3
จุดดีเปลี่ยนคำตอบเป็นห่อด้วย parseInt () เพื่อแปลงกลับเป็นจำนวนเต็ม
theVinchi

13

คุณควรตรวจสอบ api moment.js มันใช้งานง่ายมากและมีคุณสมบัติในตัวมากมาย

ฉันคิดว่าสำหรับปัญหาของคุณคุณสามารถใช้สิ่งนี้:

var unixTimestamp = moment('2012.08.10', 'YYYY.MM.DD').unix();


5

คุณสามารถใช้ตัวดำเนินการ unary +

(+new Date('2012.08.10')/1000).toFixed(0);

http://xkr.us/articles/javascript/unary-add/ - ดูภายใต้วันที่


2
เพียงแค่ต้องการเพิ่มความคิดเห็นสองรายการที่นี่: ไม่จำเป็นต้องใช้ตัวดำเนินการ add + unary เนื่องจาก/เป็นตัวดำเนินการทางคณิตศาสตร์ นอกจากนี้ให้toFixedส่งคืนสตริงไม่ใช่ตัวเลขในกรณีที่ประเภทนั้นสำคัญ ..
Laurens

4
var date = new Date('2012.08.10');
var unixTimeStamp = Math.floor(date.getTime() / 1000);

ในกรณีนี้สิ่งสำคัญคือต้องส่งคืนเฉพาะจำนวนเต็ม (ดังนั้นการหารง่ายๆจะไม่ทำ) และส่งคืนเฉพาะวินาทีที่ผ่านไปจริงเท่านั้น (นั่นคือเหตุผลที่รหัสนี้ใช้Math.floor()และไม่ใช้Math.round())


3

คุณสามารถใช้Date.parse ()แต่รูปแบบอินพุตที่ยอมรับนั้นขึ้นอยู่กับการนำไปใช้งาน อย่างไรก็ตามหากคุณสามารถแปลงวันที่เป็นรูปแบบ ISO (YYYY-MM-DD)การใช้งานส่วนใหญ่ควรเข้าใจ

ดู เหตุใด Date.parse จึงให้ผลลัพธ์ที่ไม่ถูกต้อง .




1

หลังจากเปรียบเทียบการประทับเวลากับการประทับเวลาจาก PHP แล้วข้อใดข้างต้นไม่ถูกต้องสำหรับเขตเวลาของฉัน โค้ดด้านล่างให้ผลลัพธ์เหมือนกับ PHP ซึ่งสำคัญที่สุดสำหรับโครงการที่ฉันกำลังทำอยู่

function getTimeStamp(input) {
    var parts = input.trim().split(' ');
    var date = parts[0].split('-');
	var time = (parts[1] ? parts[1] : '00:00:00').split(':');

	// NOTE:: Month: 0 = January - 11 = December.
	var d = new Date(date[0],date[1]-1,date[2],time[0],time[1],time[2]);
	return d.getTime() / 1000;
}

// USAGE::
var start = getTimeStamp('2017-08-10');
var end = getTimeStamp('2017-08-10 23:59:59');

console.log(start + ' - ' + end);

ฉันใช้สิ่งนี้บน NodeJS และเรามีเขตเวลา 'ออสเตรเลีย / ซิดนีย์' ดังนั้นฉันต้องเพิ่มสิ่งนี้ในไฟล์. env:

TZ = 'Australia/Sydney'

ข้างต้นเทียบเท่ากับ:

process.env.TZ = 'Australia/Sydney'

0

แปลงเวลาประทับเพื่อประทับเวลายูนิกซ์

const date = 1513787412; const unixDate = new Date(date * 1000);// Dec 20 2020 (object)

เพื่อรับ timeStamp หลังการแปลง const TimeStamp = new Date(date*1000).getTime(); //1513787412000

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