2013-09-21 68 views
5

gì là sự khác biệt chính giữa:Sự khác nhau giữa Date.parse() và .getTime()

dt = new Date(); 
ms = Date.parse(dt); 

dt = new Date(); 
ms = dt.getTime(); 

họ có đầu ra tương tự, nhưng những gì là sự khác biệt? và tôi nên sử dụng cái nào?

Trả lời

7

Phiên bản đầu tiên chuyển đổi một số Date thành chuỗi và phân tích cú pháp, đó là một điều khá vô nghĩa để làm - và trong một số trường hợp có thể mất thông tin, tôi nghi ngờ. (Hãy tưởng tượng trong quá trình chuyển đổi DST, khi đồng hồ quay trở lại - cùng thời gian cục bộ xảy ra hai lần trong giờ đó và tôi không biết liệu biểu diễn chuỗi có phân biệt giữa hai lần xuất hiện hay không.)

Thứ hai là đáng kể sạch hơn trong quan điểm của tôi. Nói chung, bạn nên tránh chuyển đổi chuỗi khi bạn không cần chúng - chúng thường có thể dẫn đến sự cố và không có gì trong những gì bạn đang cố gắng thực hiện là vốn có là về biểu diễn chuỗi.

Trừ khi bạn thực sự cần các Date nơi khác, nó sẽ đơn giản để sử dụng:

ms = new Date().getTime() 

Hoặc thậm chí tốt hơn, sử dụng tĩnh now() phương pháp:

ms = Date.now() 
+0

Thật là một câu trả lời sạch !!! +1 :) –

+0

whoa, tôi thực sự không cần _string_ vì tôi tính toán kết quả, cảm ơn câu trả lời và ** + câu trả lời ** về việc sử dụng đơn giản :) – faid

2

Date.parse(dt)

Chức năng phân tích cú pháp áp dụng các nhà điều hành ToString để đối số của nó và giải thích chuỗi kết quả là một ngày; nó trả về một số, giá trị thời gian UTC tương ứng với ngày tháng. Chuỗi có thể được hiểu là thời gian cục bộ, thời gian UTC hoặc thời gian ở một số múi giờ khác, tùy thuộc vào nội dung của chuỗi.

getTime()

Trả về giá trị số tương ứng với thời gian cho thời điểm nhất định theo thời gian hoàn vũ.

1

Hiệu suất sẽ là lớn Sự khác biệt. Trong cả hai trường hợp, bạn phân bổ một Date instance. Trong ví dụ đầu tiên, bạn chuyển phiên bản ngày thành parse(), dự kiến ​​là String. Công cụ JavaScript sẽ gọi toString() vào ngày mà cũng sẽ phân bổ một String cho ngày tháng. Về cơ bản, nó cũng giống như:

dt = new Date();    // allocate a Date 
dateString = dt.toString(); // allocate a String 
ms = Date.parse(dateString); // Total: 2 allocations 

Trong ví dụ thứ hai, bạn đang gọi phương thức getTime() trên dụ ngày đó sẽ loại bỏ việc phân bổ String.

dt = new Date();    // allocate a Date 
ms = dt.getTime();   // Total: 1 allocation 

Một tùy chọn khác để loại bỏ tất cả các phân bổ sẽ được gọi Date.now():

ms = Date.now();    // Total: 0 allocations 

này trực tiếp trả về thời gian tính bằng ms mà không cần xây dựng các đối tượng khác.

1

Mặc dù đó là một bài đăng cũ, tôi sẽ để lại câu trả lời cho một người truy cập vào đây muộn hơn tôi.

dt = new Date(); 

// often false, occasionally true 
Date.parse(dt) === dt.getTime() 

Đây là bởi vì bạn sẽ bị mất những thông tin về mili giây khi bạn làm dt.toString() được nội gọi bằng Date.parse(dt). Ít nhất với Chrome (63.0.3239.84) và Firfox Quantum (57.0.3), chúng triển khai phương thức Date toString() của đối tượng Date như thế này. Bạn có thể tự mình thử ví dụ sau.

dt = new Date('2018.1.1 01:01:01.001') 
dt.getTime() // 1514739661001 
Date.parse(dt) // 1514739661000 

Date.parse(dt) tương đương với dt.getTime() chỉ khi dt được chụp vào lúc này millisecond rằng bằng 0.

Các vấn đề liên quan