แปลงวันที่ iso เป็นมิลลิวินาทีในจาวาสคริปต์


89

ฉันสามารถแปลงวันที่ iso เป็นมิลลิวินาทีได้หรือไม่ ตัวอย่างเช่นฉันต้องการแปลง iso นี้

2012-02-10T13:19:11+0000

เป็นมิลลิวินาที

เพราะฉันต้องการเปรียบเทียบวันที่ปัจจุบันจากวันที่สร้าง และวันที่สร้างคือวันที่ iso


1
"มิลลิวินาที" หมายถึงอะไรกันแน่ มิลลิวินาทีเทียบกับจุดใดในเวลา? คุณหมายถึงการประทับเวลา UNIX หรือไม่?
Pekka

เช่นเดียวกับใน yahoo api วันที่แสดงเป็นมิลลิวินาที1328796537แต่ใน fb api วันที่แสดงใน iso2012-02-10T13:18:45+0000
Robin Carlo Catacutan


@mplungjan เกี่ยวข้อง แต่ไม่แน่นอน ฉันต้องการได้รับความแตกต่างระหว่างสองครั้ง
Robin Carlo Catacutan

ดังนั้นใช้ลิงค์เพื่อแปลเป็นวันที่ก่อนและทำdate1.getTime() - date2.getTime()- ทั้งหมดที่คุณต้องการ
mplungjan

คำตอบ:


151

ลองทำตามนี้

var date = new Date("11/21/1987 16:00:00"); // some mock date
var milliseconds = date.getTime(); 
// This will return you the number of milliseconds
// elapsed from January 1, 1970 
// if your date is less than that date, the value will be negative

console.log(milliseconds);

แก้ไข

คุณได้ระบุวันที่ ISO นอกจากนี้ยังได้รับการยอมรับจากผู้สร้างDateวัตถุ

var myDate = new Date("2012-02-10T13:19:11+0000");
var result = myDate.getTime();
console.log(result);

แก้ไข

สิ่งที่ดีที่สุดที่ฉันพบคือการกำจัดออฟเซ็ตด้วยตนเอง

var myDate = new Date("2012-02-10T13:19:11+0000");
var offset = myDate.getTimezoneOffset() * 60 * 1000;

var withOffset = myDate.getTime();
var withoutOffset = withOffset - offset;
console.log(withOffset);
console.log(withoutOffset);

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

แก้ไข

แก้ไขข้อบกพร่องด้วยการแปลงที่ไม่ถูกต้องเป็นมิลลิวินาทีตามความคิดเห็นของ Prasad19sara


ใช่วันที่จะไม่แยกวิเคราะห์ในทุกเบราว์เซอร์ ดูคำตอบของฉันเกี่ยวกับคำถามที่เกี่ยวข้อง
Vik David

และดูความคิดเห็นของฉันเกี่ยวกับคำตอบภายใต้คุณ;)
mplungjan

สิ่งนี้ใช้ไม่ได้ใน Firefoxvar myDate = new Date("2012-02-10T13:19:11+0000");
mplungjan

1
@mplungjan ทำไมคุณไม่ใช้แนวทางนี้ ? ฉันรู้ว่ามันยุ่งยาก แต่อย่างไรก็ตาม))
Oybek

เอ่อ ... นั่นคือทุนที่ "T" ทำอยู่ที่นั่น? นั่นเป็นเหตุผลว่าทำไมมันไม่ทำงาน @mplungjan
wle8300

28

ชวเลขของแนวทางแก้ไขก่อนหน้านี้คือ

var myDate = +new Date("2012-02-10T13:19:11+0000");

จะทำการแปลงประเภทในการบินและส่งออกวันที่โดยตรงในรูปแบบมิลลิวินาที

อีกวิธีหนึ่งคือการใช้วิธีการแยกวิเคราะห์ Date util ซึ่งแสดงผลเวลา EPOCH ในหน่วยมิลลิวินาทีเท่านั้น

var myDate = Date.parse("2012-02-10T13:19:11+0000");

คุณพิมพ์ผิดเล็กน้อยที่นั่น '+'
Stuart Siegler

@ stuart-siegler นั่นไม่ใช่การพิมพ์ผิดจริง ๆ แล้ว '+' จะส่งกลับวันที่เป็นมิลลิวินาที
LordTribual

@LordTribual "+ new" ส่งคืนวันที่เป็นมิลลิวินาทีหรือไม่
Stuart Siegler

1
@ stuart-siegler ไม่เฉพาะ "+ ใหม่" แต่ "+" ทำเคล็ดลับและเป็นชวเลขที่จะพูด ตัวอย่างเช่น+new Date()ผลตอบแทน1447857230137ซึ่งเป็นเวลาในหน่วยมิลลิวินาที
LordTribual

1
ชัดเจนกว่ามากในการสร้างวัตถุ JavaScript Number อย่างชัดเจน: const dateMillis = Number(new Date('2017-09-26T20:24:18.801Z'))แต่new Date('2017-09-26T20:24:18.801Z').getTime()หรือnew Date('2017-09-26T20:24:18.801Z').valueOf()อ่านได้ง่ายกว่า
David G

5

ตัวเลือกเป็น 2017 Date.parse()ก็คือการใช้งาน เอกสารของ MDN ชี้ให้เห็นว่ามันไม่น่าเชื่อถือก่อน ES5

var date = new Date(); // today's date and time in ISO format
var myDate = Date.parse(date);

ดูซอสำหรับรายละเอียดเพิ่มเติม


ตัวแยกวิเคราะห์ในตัวไม่น่าเชื่อถือหลังจาก ECMAScript 2011 ด้วย :-)
RobG

2

อีกวิธีหนึ่งที่เป็นไปได้คือการเปรียบเทียบวันที่ปัจจุบันกับJanuary 1, 1970คุณสามารถทำได้January 1, 1970โดยnew Date(0);

var date = new Date(); 
var myDate= date - new Date(0);

2

ใช่คุณสามารถทำได้ในบรรทัดเดียว

let ms = Date.parse('2019-05-15 07:11:10.673Z');
console.log(ms);//1557904270673

ตรงข้ามกับฟังก์ชันนี้คืออะไร!?
AG1

1

อีกวิธีหนึ่งคือการใช้ตัวแยกวิเคราะห์วัตถุ Number ดังนี้:

let result = Number(new Date("2012-02-10T13:19:11+0000"));
let resultWithGetTime = (new Date("2012-02-10T13:19:11+0000")).getTime();
console.log(result);
console.log(resultWithGetTime);

ซึ่งจะแปลงเป็นมิลลิวินาทีเช่นเดียวgetTime()กับDateวัตถุ


0
var date = new Date()
console.log(" Date in MS last three digit = "+  date.getMilliseconds())
console.log(" MS = "+ Date.now())

ใช้สิ่งนี้เราจะได้วันที่เป็นมิลลิวินาที



0

หากต้องการแปลงวันที่ UTC เป็น
ไวยากรณ์มิลลิวินาที: Date.UTC (ปี, เดือน,? วัน,? ชั่วโมง,? นาที,? วินาที,? milisec);
เช่น :
date_in_mili = Date.UTC(2020, 07, 03, 03, 40, 40, 40);
console.log('miliseconds', date_in_mili);


0

เผื่อว่าใครอยากได้เฉพาะ Time from a ISO Date สิ่งต่อไปนี้จะเป็นประโยชน์ ฉันกำลังค้นหาสิ่งนั้น แต่ก็ไม่พบคำถาม ดังนั้นในกรณีที่บางคนเห็นว่าจะเป็นประโยชน์

let isoDate = '2020-09-28T15:27:15+05:30';
let result = isoDate.match(/\d\d:\d\d/);
console.log(result[0]);

ผลลัพธ์จะเป็นเวลาเดียวจาก isoDate ซึ่งก็คือ

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