Đối tượng JavaScript Date
đại diện cho một thời điểm, dựa trên số mili giây kể từ The Epoch (ngày 1 tháng 1 năm 1970 lúc nửa đêm UTC). Đương nhiên, new Date
sử dụng đồng hồ của môi trường nơi nó chạy để có được giá trị đó. Vì vậy, nếu điều này là trong một trình duyệt trên máy tính của tôi và đồng hồ của tôi được đặt sai, nó sẽ sử dụng thời gian không chính xác của máy. *
Sau đó, họ có hai bộ chức năng bạn có thể sử dụng để nhận thông tin về thời điểm đó trong thời gian: các hàm múi giờ như các hàm getHours
, getMonth
, v.v., và UTC như getUTCHours
, getUTCMonth
, v.v. Các hàm múi giờ địa phương hoạt động trong múi giờ của môi trường. Đương nhiên, các hàm UTC đang hoạt động trong UTC.
Vì vậy, ví dụ, giả sử ai đó là ở California vào ngày 03 tháng ba năm 2017 và thực hiện điều này tại 11:30 chính xác thời gian của họ:
var dt = new Date();
console.log(dt.getHours()); // 11 -- e.g., 11 a.m.
console.log(dt.getUTCHours()); // 19 -- e.g., 7 p.m.
Các giá trị cơ bản của đối tượng là 1488569400000, nhưng các hàm múi giờ địa phương cho chúng ta biết là 11 giờ sáng và các hàm UTC cho chúng ta biết là 7 giờ tối
* (Mặc dù như James Thorpe points out, spec là a bit vague về nó, chỉ nói nó sử dụng "thời điểm hiện tại", vì thế về mặt lý thuyết một môi trường có thể quyết định có nó sử dụng một máy chủ thời gian khác ngoài máy tính cục bộ Nhưng ...)
Nguồn
2017-03-03 14:30:22
Lưu ý rằng [spec] (http://www.ecma-international.org/ecma-262/6.0/#sec-date-constructor-date) được mở để giải thích. Nó chỉ nói _ "thời gian hiện tại" _. Về lý thuyết, việc triển khai _could_ chuyển sang máy chủ thời gian mạng để nhận được giá trị phù hợp. Trong thực tế, đó là thời gian thiết bị cục bộ. –
Bạn có biết bất kỳ ngôn ngữ thương mại phổ biến nào * không * chỉ làm một ngày syscall trên máy địa phương? :) –
Không, chỉ cần chỉ ra những gì spec cho phép trong JavaScript. Ví dụ, trong C#, [nó được khai báo rõ ràng] (https://msdn.microsoft.com/en-us/library/system.datetime.now (v = vs.110) .aspx) rằng đó là thời gian máy cục bộ. –