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);
và
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?
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);
và
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?
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()
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.
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ũ.
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.
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.
Thật là một câu trả lời sạch !!! +1 :) –
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