chuyển đổi iso date thành mili giây trong javascript


87

Tôi có thể chuyển đổi iso date thành mili giây không? ví dụ tôi muốn chuyển đổi iso này

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

đến mili giây.

Vì tôi muốn so sánh ngày hiện tại với ngày đã tạo. Và ngày tạo là ngày iso.


1
Chính xác thì "mili giây" có nghĩa là gì? Mili giây so với thời điểm nào? Ý bạn là một dấu thời gian UNIX?
Pekka

giống như trong yahoo api, ngày được thể hiện bằng mili giây 1328796537, nhưng trong fb api, ngày được hiển thị trong iso2012-02-10T13:18:45+0000
Robin Carlo Catacutan


@mplungjan có liên quan, nhưng không chính xác. Tôi muốn nhận được sự khác biệt giữa hai thời điểm.
Robin Carlo Catacutan

Vì vậy, sử dụng liên kết để dịch chúng để ngày đầu tiên và làm date1.getTime() - date2.getTime()- đó là tất cả các bạn cần
mplungjan

Câu trả lời:


145

Thử đi

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

BIÊN TẬP

Bạn đã cung cấp ngày ISO. Nó cũng được chấp nhận bởi phương thức khởi tạo của Dateđối tượng

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

Biên tập

Điều tốt nhất tôi đã tìm thấy là loại bỏ phần bù theo cách thủ công.

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

Có vẻ hoạt động. Về vấn đề chuyển đổi chuỗi ISO thành Dateđối tượng, bạn có thể tham khảo các liên kết được cung cấp.

BIÊN TẬP

Đã sửa lỗi chuyển đổi sai thành mili giây theo nhận xét của Prasad19sara.


Có, Ngày sẽ không phân tích cú pháp trên tất cả các trình duyệt. Xem câu trả lời của tôi về câu hỏi liên quan.
Vik David

Và xem xét của tôi về câu trả lời dưới của bạn;)
mplungjan

Điều này không làm việc trong Firefoxvar myDate = new Date("2012-02-10T13:19:11+0000");
mplungjan

1
@mplungjan tại sao bạn không sử dụng cách tiếp cận này ? Tôi biết điều này là rườm rà nhưng dù sao))
Oybek

uh ... đó là vốn chữ "T" làm trong đó? Đó là lý do tại sao nó không hoạt động @mplungjan.
wle8300

28

Một cách viết tắt của các giải pháp trước đó là

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

Nó thực hiện chuyển đổi loại trực tiếp và xuất trực tiếp ngày tháng ở định dạng mili giây.

Một cách khác cũng đang sử dụng phương pháp phân tích cú pháp của Ngày sử dụng chỉ xuất ra thời gian EPOCH tính bằng mili giây.

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

Bạn có một chút typo ở đó, '+'
Stuart Siegler

@ stuart-siegler Thực ra không có lỗi đánh máy, dấu '+' trả về Ngày tính bằng mili giây.
LordTribual

@LordTribual "+ new" trả về ngày tính bằng mili giây?
Stuart Siegler

1
@ stuart-siegler Không phải cụ thể là "+ mới" nhưng "+" mới có tác dụng và là một cách nói ngắn gọn. Ví dụ: +new Date()trả về 1447857230137là thời gian tính bằng mili giây.
LordTribual

1
Rõ ràng hơn nhiều khi xây dựng một đối tượng JavaScript Number:, const dateMillis = Number(new Date('2017-09-26T20:24:18.801Z'))nhưng new Date('2017-09-26T20:24:18.801Z').getTime()hoặc new Date('2017-09-26T20:24:18.801Z').valueOf()thậm chí dễ đọc hơn.
David G

5

Một tùy chọn khác vào năm 2017 là sử dụng Date.parse(). Tuy nhiên, tài liệu của MDN chỉ ra rằng nó không đáng tin cậy trước ES5.

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

Xem fiddle để biết thêm chi tiết.


Trình phân tích cú pháp tích hợp cũng không đáng tin cậy sau ECMAScript 2011. :-)
RobG

2

Một giải pháp khả thi khác là so sánh ngày hiện tại với January 1, 1970, bạn có thể lấy January 1, 1970bằng new Date(0);

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

2

Có, bạn có thể làm điều này trong một dòng duy nhất

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

Điều gì đối lập với chức năng này !?
AG1

1

Một giải pháp khác có thể là sử dụng trình phân tích cú pháp đối tượng Number như sau:

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

Điều này chuyển đổi thành mili giây giống như getTime()trên Dateđối tượng


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

Sử dụng điều này, chúng tôi có thể nhận được ngày trong mili giây


0

var date = new Date (date_string); var miliseconds = date.getTime ();

Điều này đã làm việc cho tôi!


0

nếu muốn chuyển đổi ngày UTC sang mili giây thì
cú pháp: Date.UTC (năm, tháng,? ngày,? giờ,? min,? giây,? milisec);
ví dụ :
date_in_mili = Date.UTC(2020, 07, 03, 03, 40, 40, 40);
console.log('miliseconds', date_in_mili);


0

Trong trường hợp nếu ai đó chỉ muốn lấy Thời gian từ ngày ISO, thì cách làm sau sẽ hữu ích. Tôi đã tìm kiếm điều đó và tôi không thể tìm thấy câu hỏi cho nó. Vì vậy, trong trường hợp một số người nhìn thấy sẽ hữu ích.

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

Đầu ra sẽ là thời gian duy nhất từ ​​isoDate là,

15:27
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.