2012-11-05 23 views
5

Tôi muốn sử dụng vỏ để có được thời gian kỷ nguyên và sau đó sử dụng javascript trên một trang html để có được một thời gian kỷ nguyên và sau đó nhận được sự khác biệt giữa chúng nhưng Tôi sợ rằng thời đại thời đại có thể không được đồng bộ giữa các kịch bản khác nhau vì vậy sự khác biệt này là vô dụnglà thời gian kỷ nguyên giống nhau trên cùng một máy với kịch bản diffent/chương trình

vì vậy tôi muốn biết, nếu cùng một lúc, tôi sử dụng shell và javascript để có được epoch tiem sẽ kết quả có giống nhau hay không? nếu không, sự khác biệt lớn như thế nào?

cảm ơn!

+0

Tôi đoán chúng sẽ giống nhau, nhưng không thể tin cậy vì trình duyệt có thể làm những điều kỳ lạ hoặc người dùng có thể thay đổi một số cài đặt hoặc điều gì đó. Nó sẽ tốt hơn rất nhiều nếu bạn chỉ sử dụng một máy chủ để có được thời gian của bạn. –

+0

Tôi có nghĩa là nếu javascript chạy trên cùng một máy như kịch bản lệnh shell, chúng sẽ giống nhau không – user1769686

+0

Tôi biết ý của bạn là gì. Tất cả những gì tôi nói là những thứ này không phải lúc nào cũng hoàn toàn đáng tin cậy vì không phải ai cũng tuân thủ các thông số kỹ thuật. Chủ yếu, họ nên giống nhau, vâng. –

Trả lời

1

Nếu bạn có nghĩa là số giây kể từ thời kỳ Unix (1970-01-01T00: 00: 00Z), nó được điều chỉnh bởi chính định nghĩa này. Sự khác biệt duy nhất bạn có thể thấy là do:

  • các lần gọi khác nhau của cuộc gọi hệ thống trả về *);
  • đồng hồ không đồng bộ trên các hệ thống khác nhau.

và có thể thêm:

  • đồng hồ không đồng bộ về nhân xử lý khác nhau/xử lý vật lý;
  • xử lý phụ thuộc triển khai của hàm trả về thời gian hiện tại (ví dụ: triển khai công cụ JS có thể có thể lưu trữ giá trị trong một thời gian ngắn không phải thực hiện syscall thực, mặc dù tôi nghi ngờ điều này).

Tùy thuộc vào độ phân giải thời gian bạn cần, một số trong số này không phải là vấn đề. Tôi đoán là, nếu bạn không cần độ chi tiết tốt hơn 1s, bạn sẽ tốt hơn (trên cùng một máy).

*) cũng lưu ý rằng trên hệ thống lõi đơn, bạn không thể thực sự nhận được cùng một thời điểm (ít nhất là với độ phân giải ns) từ các syscalls khác nhau, trừ khi kernel lưu trữ nó, đơn giản là vì chúng phải xảy ra sau khác.

+0

Ồ, lý thuyết hơi sâu, vì vậy nếu tôi sử dụng kịch bản lệnh shell và javascript trên cùng một máy, tôi hy vọng độ chi tiết chính xác ở mức 0,2 giây hoặc thấp hơn, có thể hay không? – user1769686

+0

@ user1769686 Tôi mong đợi như vậy (thực sự tôi tin rằng nó nên được nhiều hơn về quy mô ms). Tuy nhiên, hãy nhớ rằng đôi khi bạn có thể dễ dàng thấy độ trễ lớn hơn do tải cao hơn trên máy tính, đặc biệt là trong trình duyệt hiển thị trang. – peterph

0

Theo ECMA-262 section 15.9.1.1:

Thời gian được đo bằng ECMAScript trong mili giây kể từ 1 tháng 1 năm 1970 UTC. Trong thời gian giá trị nhảy vọt giây được bỏ qua. Giả sử rằng có chính xác là 86,400,000 mili giây mỗi ngày.

Vì vậy, vâng, mọi triển khai JavaScript tuân thủ tiêu chuẩn phải trả lại chính xác cùng một giá trị, tự chăm sóc mọi đồng hồ vật lý của chính nó. Chặn thiết lập sai của đồng hồ hệ thống, bạn sẽ có cùng giá trị ở khắp mọi nơi.

Lưu ý rằng định nghĩa "epoch" và "seconds since" trong các ngôn ngữ và hệ thống khác nhau (ít nhất là hầu hết các hệ thống khác sử dụng giây, không phải mili giây và thường mất vài giây trong tài khoản), vì vậy bạn có thể ' t đảm bảo rằng thời gian JS, thậm chí chia cho 1000 sẽ phù hợp với dấu thời gian từ một nền tảng hoặc hệ điều hành khác.