Câu trả lời ngắn
Không có tài liệu phổ biến trên mạng mà javascript phục vụ; mỗi trình duyệt có javascript thực sự là một triển khai. Tuy nhiên, có một tiêu chuẩn mà hầu hết các trình duyệt hiện đại có xu hướng tuân theo, và đó là tiêu chuẩn EMCAScript; các chuỗi tiêu chuẩn ECMAScript sẽ lấy tối thiểu việc triển khai định nghĩa ISO 8601.
Ngoài ra, còn có một tiêu chuẩn thứ hai do IETF đưa ra mà các trình duyệt cũng có xu hướng tuân theo, đó là định nghĩa về dấu thời gian được thực hiện trong RFC 2822. Tài liệu thực tế có thể được tìm thấy trong danh sách tài liệu tham khảo ở phía dưới.
Từ điều này, bạn có thể mong đợi chức năng cơ bản, nhưng những gì mà Google nghĩ là không phải là bản chất của Cameron. Mặc dù vậy, tôi sẽ đi sâu hơn một chút về thủ tục này, vì dường như chỉ có ba người thực sự trả lời câu hỏi (Scott, goofballLogic và peller cụ thể) mà theo tôi, cho thấy hầu hết mọi người không biết về những gì thực sự xảy ra khi bạn tạo một đối tượng Date.
Câu trả lời dài
Tài liệu liệt kê các bộ định dạng định dạng được hỗ trợ bởi đối tượng Date () ở đâu?
Để trả lời câu hỏi, hoặc thậm chí thường tìm câu trả lời cho câu hỏi này, bạn cần biết rằng javascript không phải là một ngôn ngữ mới lạ; đây thực sự là một triển khai của ECMAScript và tuân theo các tiêu chuẩn ECMAScript (nhưng lưu ý, javascript cũng thực sự có trước các tiêu chuẩn đó; các tiêu chuẩn EMCAScript được xây dựng từ việc triển khai LiveScript / JavaScript sớm). Tiêu chuẩn ECMAScript hiện tại là 5.1 (2011); tại thời điểm câu hỏi ban đầu được hỏi (tháng 6 năm 2009), tiêu chuẩn là 3 (4 đã bị bỏ), nhưng 5 đã được phát hành ngay sau bài đăng vào cuối năm 2009. Điều này sẽ phác thảo một vấn đề; việc triển khai javascript theo tiêu chuẩn nào có thể tuân theo, có thể không phản ánh những gì thực sự diễn ra, bởi vì a) đó là việc thực hiện một tiêu chuẩn nhất định, b) không phải tất cả các triển khai của một tiêu chuẩn đều là thuần túy,
Về cơ bản, khi giao dịch với javascript, bạn đang xử lý một công cụ phái sinh (javascript cụ thể cho trình duyệt) của một triển khai (chính javascript). Ví dụ, động cơ V8 của Google triển khai ECMAScript 5.0, nhưng JScript của Trình thám hiểm Internet không cố tuân thủ mọi tiêu chuẩn ECMAScript, nhưng Internet Explorer 9 không tuân thủ ECMAScript 5.0.
Khi một đối số duy nhất được chuyển đến Ngày mới (), nó sẽ tạo nguyên mẫu hàm này:
new Date(value)
Khi hai hoặc nhiều đối số được chuyển đến Ngày mới (), nó sẽ tạo nguyên mẫu hàm này:
new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )
Cả hai chức năng này trông có vẻ quen thuộc, nhưng điều này không trả lời ngay câu hỏi của bạn và định lượng nào là định dạng ngày có thể chấp nhận được. Khi bạn chuyển một chuỗi sang Ngày mới (), nó sẽ gọi nguyên mẫu (lưu ý rằng tôi đang sử dụng từ nguyên mẫu một cách lỏng lẻo; các phiên bản có thể là các hàm riêng lẻ hoặc nó có thể là một phần của câu lệnh có điều kiện trong một hàm) Ngày mới (giá trị) với chuỗi của bạn làm đối số cho tham số giá trị trên đường cao tốc độ cao. Hàm này trước tiên sẽ kiểm tra xem đó là số hay chuỗi. Tài liệu cho chức năng này có thể được tìm thấy ở đây:
http: //www.ecma-i Intl.org/ecma-262/5.1/#sec-15.9.3.2
Từ điều này, chúng ta có thể suy luận rằng để có được định dạng chuỗi được phép cho Ngày (giá trị) mới, chúng ta phải xem phương thức Date.parse (chuỗi). Tài liệu cho phương pháp này có thể được tìm thấy ở đây:
http: //www.ecma-i Intl.org/ecma-262/5.1/#sec-15.9.4.2
Và chúng ta có thể suy luận thêm rằng ngày dự kiến sẽ ở Định dạng mở rộng ISO 8601 được sửa đổi, như được chỉ định ở đây:
http: //www.ecma-i Intl.org/ecma-262/5.1/#sec-15.9.1.15
Tuy nhiên, chúng tôi có thể nhận ra từ kinh nghiệm rằng đối tượng Ngày của javascript chấp nhận các định dạng khác (được thi hành bởi sự tồn tại của câu hỏi này) và điều này không sao vì ECMAScript cho phép thực hiện các định dạng cụ thể. Tuy nhiên, điều đó vẫn không trả lời cho câu hỏi tài liệu nào có sẵn trên các định dạng có sẵn, cũng như định dạng nào thực sự được phép. Chúng ta sẽ xem xét triển khai javascript của Google, V8; xin lưu ý rằng tôi không gợi ý đây là công cụ javascript tốt nhất của YouTube (làm thế nào người ta có thể định nghĩa về điều tốt nhất là hay nhất là tốt nhất) và người ta không thể cho rằng các định dạng được phép trong V8 đại diện cho tất cả các định dạng hiện có, nhưng tôi nghĩ nó công bằng giả sử họ làm theo những kỳ vọng hiện đại.
V8 của Google, date.js, DateConstructor
https://code.google.com.vn/p/v8/source/browse/trunk/src/date.js?r=18400#141
Nhìn vào hàm DateConstructor, chúng ta có thể suy ra rằng chúng ta cần tìm hàm DatePude; tuy nhiên, xin lưu ý rằng, năm năm trước đây không phải là năm thực tế và chỉ là một tham chiếu đến tham số của năm năm.
V8 của Google, date.js, DatePude
https://code.google.com.vn/p/v8/source/browse/trunk/src/date.js?r=18400#270
Điều này gọi% DatePudeString, đây thực sự là một tham chiếu hàm thời gian chạy cho hàm C ++. Nó đề cập đến đoạn mã sau:
V8 của Google, runtime.cc,% DatePudeString
https://code.google.com.vn/p/v8/source/browse/trunk/src/r nb.cc?r=18400#9559
Hàm gọi chúng tôi quan tâm trong hàm này là cho DateParser :: Parse (); bỏ qua logic xung quanh các lệnh gọi hàm này, đây chỉ là các kiểm tra để tuân thủ loại mã hóa (ASCII và UC16). DateParser :: Parse được định nghĩa ở đây:
V8 của Google, dateparser-inl.h, DateParser :: Parse
https://code.google.com.vn/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
Đây là chức năng thực sự xác định định dạng mà nó chấp nhận. Về cơ bản, nó kiểm tra tiêu chuẩn EMCAScript 5.0 ISO 8601 và nếu nó không tuân thủ tiêu chuẩn, thì nó sẽ cố gắng xây dựng ngày dựa trên các định dạng cũ. Một vài điểm chính dựa trên các ý kiến:
- Các từ trước số đầu tiên mà trình phân tích cú pháp chưa biết sẽ bị bỏ qua.
- Văn bản ngoặc đơn được bỏ qua.
- Các số chưa được ký theo sau là: Khác: Được hiểu là một thành phần thời gian của Google.
- Số chưa ký theo sau là. được hiểu là một thành phần thời gian của người dùng, và phải được theo sau bởi mili giây.
- Các số được ký theo sau là giờ hoặc giờ phút (ví dụ +5: 15 hoặc +0515) được hiểu là múi giờ.
- Khi khai báo giờ và phút, bạn có thể sử dụng hoặc hhmm mm mm hoặc mm hhmm.
- Các từ chỉ múi giờ được hiểu là múi giờ.
- Tất cả các số khác được hiểu là các thành phần ngày của Wikipedia.
- Tất cả các từ bắt đầu bằng ba chữ số đầu tiên của tháng được hiểu là tháng.
- Bạn có thể định nghĩa phút và giờ với nhau theo một trong hai định dạng: Hồi hh: mm, hoặc hhmmv.
- Không được phép sử dụng các biểu tượng như Hồi +, Hồi - cường và không thể so sánh được) Sau khi một số được xử lý.
- Các mục khớp với nhiều định dạng (ví dụ 1970-01-01) được xử lý dưới dạng chuỗi EMCAScript 5.0 ISO 8601 tuân thủ tiêu chuẩn.
Vì vậy, điều này là đủ để cung cấp cho bạn một ý tưởng cơ bản về những gì mong đợi khi chuyển một chuỗi vào một đối tượng Date. Bạn có thể mở rộng thêm về điều này bằng cách xem thông số kỹ thuật sau mà Mozilla hướng đến trên Mạng của nhà phát triển Mozilla (tuân thủ dấu thời gian của IETF RFC 2822):
http://tools.ietf.org/html/rfc2822#page-14
Ngoài ra, Microsoft Developer Network còn đề cập đến một tiêu chuẩn bổ sung cho đối tượng Date: ECMA-402, Đặc tả API quốc tế hóa ECMAScript, bổ sung cho tiêu chuẩn ECMAScript 5.1 (và tương lai). Điều đó có thể được tìm thấy ở đây:
http: //www.ecma-i Intl.org/ecma-402/1.0/
Trong mọi trường hợp, điều này sẽ giúp làm nổi bật rằng không có "tài liệu" nào đại diện cho tất cả các triển khai javascript, nhưng vẫn có đủ tài liệu để hiểu ý nghĩa hợp lý của chuỗi nào được chấp nhận cho đối tượng Date. Khá nhiều câu hỏi được tải khi bạn nghĩ về nó, có? : P
Người giới thiệu
http: //www.ecma-i Intl.org/ecma-262/5.1/#sec-15.9.3.2
http: //www.ecma-i Intl.org/ecma-262/5.1/#sec-15.9.4.2
http: //www.ecma-i Intl.org/ecma-262/5.1/#sec-15.9.1.15
http://tools.ietf.org/html/rfc2822#page-14
http: //www.ecma-i Intl.org/ecma-402/1.0/
https://code.google.com.vn/p/v8/source/browse/trunk/src/date.js?r=18400#141
https://code.google.com.vn/p/v8/source/browse/trunk/src/date.js?r=18400#270
https://code.google.com.vn/p/v8/source/browse/trunk/src/r nb.cc?r=18400#9559
https://code.google.com.vn/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
Tài nguyên
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
http://msdn.microsoft.com/en-us/l Library / ff743760 (v = vs.94) .aspx