Lý lịch
Date
Đối tượng của JavaScript theo dõi thời gian trong UTC trong nội bộ, nhưng thường chấp nhận đầu vào và tạo đầu ra theo thời gian cục bộ của máy tính mà nó đang chạy. Nó có rất ít phương tiện để làm việc với thời gian ở các múi giờ khác.
Biểu diễn bên trong của một Date
đối tượng là một số duy nhất, biểu thị số mili giây đã trôi qua kể từ đó 1970-01-01 00:00:00 UTC
, không liên quan đến giây nhuận. Không có múi giờ hoặc định dạng chuỗi được lưu trữ trong chính đối tượng Date. Khi các chức năng khác nhau của Date
đối tượng được sử dụng, múi giờ địa phương của máy tính được áp dụng cho biểu diễn bên trong. Nếu hàm tạo ra một chuỗi, thì thông tin ngôn ngữ của máy tính có thể được xem xét để xác định cách tạo ra chuỗi đó. Các chi tiết khác nhau cho mỗi chức năng, và một số là cụ thể thực hiện.
Các hoạt động duy nhất mà Date
đối tượng có thể thực hiện với các múi giờ không cục bộ là:
Nó có thể phân tích một chuỗi chứa phần bù UTC số từ bất kỳ múi giờ nào. Nó sử dụng điều này để điều chỉnh giá trị được phân tích cú pháp và lưu trữ tương đương UTC. Thời gian cục bộ ban đầu và bù không được giữ lại trong Date
đối tượng kết quả . Ví dụ:
var d = new Date("2020-04-13T00:00:00.000+08:00");
d.toISOString() //=> "2020-04-12T16:00:00.000Z"
d.valueOf() //=> 1586707200000 (this is what is actually stored in the object)
Trong các môi trường đã triển khai API quốc tế hóa ECMASCript (còn gọi là "Intl"), một Date
đối tượng có thể tạo ra một chuỗi cụ thể theo miền địa phương được điều chỉnh theo một mã định danh múi giờ nhất định. Điều này được thực hiện thông qua timeZone
tùy chọn toLocaleString
và các biến thể của nó. Hầu hết các triển khai sẽ hỗ trợ các định danh múi giờ IANA, chẳng hạn như 'America/New_York'
. Ví dụ:
var d = new Date("2020-04-13T00:00:00.000+08:00");
d.toLocaleString('en-US', { timeZone: 'America/New_York' })
//=> "4/12/2020, 12:00:00 PM"
// (midnight in China on Apring 13th is noon in New York on April 12th)
Hầu hết các môi trường hiện đại đều hỗ trợ bộ định danh múi giờ IANA đầy đủ ( xem bảng tương thích tại đây ). Tuy nhiên, hãy nhớ rằng số nhận dạng duy nhất cần được hỗ trợ bởi Intl là 'UTC'
, do đó bạn nên kiểm tra cẩn thận nếu bạn cần hỗ trợ các trình duyệt cũ hơn hoặc môi trường không điển hình (ví dụ: các thiết bị IoT nhẹ).
Thư viện
Có một số thư viện có thể được sử dụng để làm việc với các múi giờ. Mặc dù chúng vẫn không thể làm cho Date
đối tượng hoạt động khác đi, nhưng chúng thường triển khai cơ sở dữ liệu múi giờ IANA tiêu chuẩn và cung cấp các hàm để sử dụng nó trong JavaScript. Các thư viện hiện đại sử dụng dữ liệu múi giờ được cung cấp bởi API quốc tế, nhưng các thư viện cũ hơn thường có chi phí hoạt động, đặc biệt nếu bạn đang chạy trong trình duyệt web, vì cơ sở dữ liệu có thể hơi lớn. Một số thư viện này cũng cho phép bạn giảm có chọn lọc tập dữ liệu, theo đó múi giờ được hỗ trợ và / hoặc theo phạm vi ngày bạn có thể làm việc.
Dưới đây là các thư viện để xem xét:
Thư viện dựa trên quốc tế
Phát triển mới nên chọn một trong những triển khai này, dựa trên API quốc tế cho dữ liệu múi giờ của họ:
Thư viện phi quốc tế
Các thư viện này được duy trì, nhưng mang gánh nặng đóng gói dữ liệu múi giờ của riêng họ, có thể khá lớn.
* Mặc dù Thời điểm và Mốc thời gian đã được đề xuất trước đây, nhóm Hiện tại thích người dùng chọn Luxon để phát triển mới.
Thư viện ngừng hoạt động
Các thư viện này đã chính thức ngừng hoạt động và không còn được sử dụng.
Đề xuất trong tương lai
Các đề xuất TC39 Temporal nhằm mục đích cung cấp một tập mới của các đối tượng tiêu chuẩn để làm việc với ngày tháng và thời gian bằng ngôn ngữ Javascript chính nó. Điều này sẽ bao gồm hỗ trợ cho một đối tượng nhận thức múi giờ.