Câu hỏi Tôi có thể tìm tài liệu về định dạng ngày trong JavaScript ở đâu? [đã đóng]


Tôi nhận thấy rằng JavaScript new Date() chức năng là rất thông minh trong việc chấp nhận ngày trong một số định dạng.

Xmas95 = new Date("25 Dec, 1995 23:15:00")
Xmas95 = new Date("2009 06 12,12:52:39")
Xmas95 = new Date("20 09 2006,12:52:39")

Tôi không thể tìm thấy tài liệu ở bất cứ nơi nào hiển thị tất cả các định dạng chuỗi hợp lệ trong khi gọi new Date() chức năng.

Điều này là để chuyển đổi một chuỗi thành một ngày. Nếu chúng ta nhìn vào phía đối diện, đó là, chuyển đổi một đối tượng ngày thành một chuỗi, cho đến bây giờ tôi đã có ấn tượng rằng JavaScript không có một API dựng sẵn để định dạng một đối tượng ngày thành một chuỗi.

Ghi chú của biên tập viên: Cách tiếp cận sau đây là nỗ lực của người hỏi đã làm việc trên một trình duyệt cụ thể nhưng không phải làm việc nói chung; xem câu trả lời trên trang này để xem một số giải pháp thực tế.

Hôm nay, tôi chơi với toString() phương pháp trên đối tượng ngày và đáng ngạc nhiên nó phục vụ mục đích định dạng ngày thành chuỗi.

var d1 = new Date();
d1.toString('yyyy-MM-dd');       //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome
d1.toString('dddd, MMMM ,yyyy')  //Returns "Monday, June 29,2009" in Internet Explorer, but not Firefox or Chrome

Ngoài ra ở đây tôi không thể tìm thấy bất kỳ tài liệu nào về tất cả các cách chúng ta có thể định dạng đối tượng ngày thành một chuỗi.

Tài liệu liệt kê các thông số định dạng được hỗ trợ bởi đâu Date() vật?


1294
2018-06-29 05:46


gốc


ví dụ của bạn không thực sự hoạt động theo cách bạn nghĩ: jsfiddle.net/edelman/WDNVk/1 - Jason
Xin lỗi, chuyển các chuỗi định dạng trong toString hoạt động trong .NET và nó có thể hoạt động trong Java, nhưng như Jason đã chỉ ra, điều này không thực sự hoạt động trong Javascript. - Joshua Carmody
Mọi người nhớ - câu hỏi, bất kể kinh điển như thế nào, cần phải vẫn còn câu hỏi. Vui lòng không sửa bất kỳ chỉnh sửa nào đưa câu hỏi này thành câu trả lời, tinh chỉnh và duy trì câu trả lời thay thế. Cảm ơn :) - Tim Post♦
Tôi đã sử dụng mã trong liên kết này msdn.microsoft.com/en-us/library/ie/ff743760(v=vs.94).aspx - (date.toLocaleDateString ("en-US")); - Khaled Annajar
Nếu khách truy cập trong tương lai vào trang này bị nhầm lẫn với cách hầu hết các câu trả lời liên quan đến câu hỏi, tôi khuyên bạn nên đọc sửa đổi câu hỏi, đặc biệt là (nếu khác với ở trên) sửa đổi 15 @Eric Muyser - Tôi bị nhầm lẫn bởi việc thiếu sử dụng Date # toString không hợp lệ. - user66001


Các câu trả lời:


tôi yêu 10 cách định dạng thời gian và ngày sử dụng JavaScript và Làm việc với ngày.

Về cơ bản, bạn có ba phương pháp và bạn phải kết hợp các chuỗi cho chính mình:

getDate() // Returns the date
getMonth() // Returns the month
getFullYear() // Returns the year

Thí dụ:

var d = new Date();
var curr_date = d.getDate();
var curr_month = d.getMonth() + 1; //Months are zero based
var curr_year = d.getFullYear();
console.log(curr_date + "-" + curr_month + "-" + curr_year);


1012
2018-04-12 07:18



Cả hai trang web này đều có giấy phép hạn chế. Vì vậy, nếu bạn sử dụng mã (không được phép), bạn sẽ vi phạm. Momentjs (stackoverflow.com/a/10119138/278976) trông giống như một lựa chọn tốt hơn và là giấy phép MIT. - Homer6
@peller Câu trả lời này trả lời câu hỏi "Làm cách nào để định dạng ngày trong javascript?" đó chính là tiêu đề của câu hỏi. Trong cơ thể của câu hỏi, anh ta khá là lừa dối. Và, theo quan điểm của bạn, câu trả lời này không nói về định dạng chuỗi sử dụng các thư viện không chuẩn hoặc không được đề cập. Nhưng đó là một phần của câu hỏi đã được hỏi không chính xác, như bình luận số 1 về câu hỏi chỉ ra. Vì vậy, điều này trả lời câu hỏi thực sự, nhưng không phải là các chuỗi định dạng không thực sự tồn tại. - McKay
@McKay; đó không phải là câu hỏi. Tôi nghĩ rằng bạn hoặc là hiểu lầm những gì người bán yêu cầu hoặc bị nguyền rủa trong lý luận của bạn. - codeinthehole
@codeinthehole "Định dạng ngày trong Javascript" là câu hỏi. "cho đến bây giờ tôi đã có ấn tượng rằng JavaScript không có API tích hợp để định dạng đối tượng ngày thành chuỗi." nhưng sau đó nói về hành vi, mà tôi tin rằng anh ấy nghĩ là bản địa trong javascript. Không biết anh ta tham chiếu nhầm đến thư viện nào, tôi nghĩ phỏng đoán tốt nhất là anh ấy đặt câu hỏi, "Làm cách nào để định dạng ngày tháng trong javascript?" và tôi không nghĩ mình đang nhảy vọt. - McKay
MM có nghĩa là 01-12, không phải 1-12: 2013-04-17 => OK 2013-4-17 => BAD - Adrian Maire


Moment.js

Nó là thư viện ngày (JavaScript) * JavaScript để phân tích cú pháp, thao tác và định dạng ngày tháng.

var a = moment([2010, 1, 14, 15, 25, 50, 125]);
a.format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
a.format("ddd, hA");                       // "Sun, 3PM"

(*) trọng lượng nhẹ có nghĩa là 9.3KB được giảm thiểu + gzipped trong thiết lập nhỏ nhất có thể (feb 2014) 


672
2017-08-11 07:27



Điều này cũng cung cấp một mẫu trang trí xung quanh đối tượng Date thay vì khỉ đấm đối tượng lõi, vì vậy bạn ít có khả năng bị xung đột xuống đường. - Gabe Martin-Dempesy
Tôi không nghĩ rằng tôi đã từng gặp một thư viện bất kì ngôn ngữ lập trình / môi trường phục vụ mục đích của nó một cách hoàn hảo. Ngoài ra các tài liệu được mở rộng và thực sự, thực sự tốt. Thực sự hạnh phúc vì đã tìm thấy điều này bởi vì ngày tháng đã là một nỗi đau để đối phó với trong quá khứ (mặc dù Datejs cải thiện tình hình phần nào cho tôi). - Zac Seth
Vui lòng ngừng lạm dụng từ "nhẹ". Ngay cả 5kb là ridiculously lớn cho chức năng như vậy, và theo ngày hôm nay rằng kích thước đã tăng lên đến 19kb. - user123444555621
@ Pumbaa80 Tôi không đồng ý rằng "Ngay cả 5kb là ridiculously lớn cho chức năng như vậy". Bạn đã xem tài liệu chưa? Nó là một thư viện cực kỳ hữu ích để xử lý các ngày trong JS. Tôi hiểu rằng việc có một thư viện lớn hơn một vài KB cho việc sử dụng một định dạng cơ bản như "D / M / Y" có thể hơi quá mức, tuy nhiên sự khác biệt của một vài KB trở nên không đáng kể. . Mã duy trì là một điều tốt vì lợi ích của một vài KB. Nếu nó đã được giảm thiểu 100KB, tôi sẽ đồng ý. - Turnerj
@Tumerj lập luận rằng nó là hữu ích không có gì để giải quyết các mối quan tâm của trọng lượng nhẹ. Cả hai không liên quan. - JoshJordan


Nếu bạn đang sử dụng Giao diện người dùng jQuery trong dự án của bạn, bạn có thể sử dụng phương pháp datepicker tích hợp để định dạng đối tượng ngày của bạn:

$.datepicker.formatDate('yy-mm-dd', new Date(2007, 1 - 1, 26));

Tuy nhiên, datepicker chỉ định dạng ngày tháng và không thể định dạng thời gian.

Hãy xem Định dạng datepicker jQuery UIDate, Các ví dụ.


419
2017-08-03 16:55



làm thế nào để nói với nó để sử dụng thời gian địa phương hoặc Zulu? - Ustaman Sangat
tôi thích sử dụng giải pháp này có thể có được thời gian mà không cần bất kỳ thư viện nào: new Date (). toTimeString (). match (/ ^ ([0-9] {2}: [0-9] {2}: [0-9 ] {2}) /) [0] FYI - markcial
Có cách nào để làm việc này không. $ .datepicker.formatDate ('yy-mm-dd', ngày mới ("txtAdvDate" .Val ()); hoặc một số thứ tương tự - Pomster
@ Pomster - điều gì sẽ khiến bạn nghĩ chuỗi "txtAdvDate" sẽ có phương pháp val trên đó? Ý bạn là $ ('# txtAdvDate'). Val ()? Giả sử nó phù hợp với một trong các nhà xây dựng (xem tại đây) w3schools.com/jsref/jsref_obj_date.asp) thì điều đó sẽ hoạt động tốt. - vbullinger
@Pomster - hãy thử sử dụng: document.getElementById (id) .value = $ .datepicker.formatDate ('yy-mm-dd', new Date ()); - mrrsb


Tài liệu liệt kê các thông số định dạng được hỗ trợ bởi đâu Date() vật?

Tôi tình cờ gặp điều này ngày hôm nay và khá ngạc nhiên rằng không ai dành thời gian để trả lời câu hỏi đơn giản này. Đúng vậy, có rất nhiều thư viện để giúp thao tác ngày. Một số là tốt hơn so với những người khác. Nhưng đó không phải là câu hỏi.

AFAIK, JavaScript thuần túy không hỗ trợ định dạng thông số cách bạn đã chỉ ra bạn muốn sử dụng chúng. Nhưng nó hỗ trợ các phương thức để định dạng ngày và / hoặc thời gian, chẳng hạn như .toLocaleDateString(), .toLocaleTimeString().toUTCString().

Các Date đối tượng tôi sử dụng thường xuyên nhất là trên trang web w3schools.com (nhưng tìm kiếm nhanh trên Google sẽ tiết lộ nhiều hơn nữa có thể đáp ứng tốt hơn nhu cầu của bạn).

Cũng lưu ý rằng Thuộc tính đối tượng ngày tháng phần cung cấp liên kết đến prototype, minh họa một số cách bạn có thể mở rộng đối tượng Date với các phương thức tùy chỉnh. Đã có một số cuộc tranh luận trong cộng đồng JavaScript qua nhiều năm về việc liệu đây có phải là thực hành tốt nhất hay không và tôi không ủng hộ hoặc chống lại nó, chỉ cần chỉ ra sự tồn tại của nó.


216
2018-05-21 12:48



MDN cũng là một tài liệu tham khảo tuyệt vời: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… - Cypher
Câu trả lời của tôi cũng cố gắng giải quyết câu hỏi này. Tôi tin rằng các trình duyệt Firefox hoặc Mozilla đã từng cung cấp phương thức Date.toString () đã lấy một chuỗi định dạng như vậy. Thật không may, tôi không thể tìm thấy dấu vết của tài liệu cũ. Nó không còn là một phần của tiêu chuẩn và dường như không được hỗ trợ ở bất cứ nơi nào nữa, ngay cả trong Firefox. - peller


Chức năng định dạng tùy chỉnh:

Đối với các định dạng cố định, một hàm đơn giản làm cho công việc. Ví dụ sau tạo định dạng quốc tế YYYY-MM-DD:

function dateToYMD(date) {
    var d = date.getDate();
    var m = date.getMonth() + 1;
    var y = date.getFullYear();
    return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
}

Lưu ý: Tuy nhiên, thường không phải là một ý tưởng tốt để mở rộng các thư viện chuẩn Javascript (ví dụ: bằng cách thêm hàm này vào nguyên mẫu Ngày tháng).

Một hàm nâng cao hơn có thể tạo ra đầu ra có thể định cấu hình dựa trên tham số định dạng. Có một vài ví dụ hay trong cùng một trang này.

Nếu viết chức năng định dạng quá dài, có rất nhiều thư viện xung quanh chức năng đó. Một số câu trả lời khác đã liệt kê chúng. Nhưng sự phụ thuộc ngày càng tăng cũng có phần ngược lại.

Các hàm định dạng ECMAScript chuẩn:

Vì các phiên bản ECMAscript gần đây hơn, Date lớp có một số chức năng định dạng cụ thể:

toDateString: Thực hiện phụ thuộc, chỉ hiển thị ngày tháng.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.todatestring

new Date().toDateString(); // e.g. "Fri Nov 11 2016"

toISOString: Hiển thị ngày và giờ ISO 8601.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring

new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"

toJSON: Stringifier cho JSON.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tojson

new Date().toJSON(); // e.g. "2016-11-21T08:00:00.000Z"

toLocaleDateString: Phụ thuộc thực hiện, một ngày ở định dạng địa phương.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaledatestring

new Date().toLocaleDateString(); // e.g. "21/11/2016"

toLocaleString: Phụ thuộc thực hiện, ngày và giờ ở định dạng ngôn ngữ.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring

new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"

toLocaleTimeString: Thực hiện phụ thuộc, một thời gian ở định dạng địa phương.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaletimestring

new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"

toString: Generic toString cho Ngày.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring

new Date().toString(); // e.g. "Fri Nov 11 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"

Lưu ý: có thể tạo đầu ra tùy chỉnh ra khỏi các chức năng định dạng đó:

new Date().toISOString().slice(0,10); // By @Image72, return YYYY-MM-DD

200
2017-07-02 20:07



Nó phải được chấp nhận trả lời, bởi vì nó cung cấp cho các định dạng yêu cầu (01-01-2000, không 1-1-2000) - Danubian Sailor
Ngày mới (). toISOString (). slice (0,10) // "2015-04-27" - image72
Sẽ rất hữu ích nếu không có ví dụ vào ngày 11 tháng 9, do đó, sẽ rõ ràng vị trí nào là ngày và tháng được trình bày. - abimelex
@abimelex đã xong. Hy vọng nó là rõ ràng hơn bây giờ. - Adrian Maire


Câu trả lời ngắn

Không có tài liệu "phổ quát" 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 theo dõi và đó là tiêu chuẩn EMCAScript; các chuỗi chuẩn ECMAScript sẽ mất, tối thiểu, việc thực hiện sửa đổi định nghĩa ISO 8601.

Thêm vào đó, có một tiêu chuẩn thứ hai được thiết lập bởi IETF các trình duyệt có xu hướng theo dõi, đó là định nghĩa cho các 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 tham chiếu ở dưới cùng.

Từ đó bạn có thể mong đợi chức năng cơ bản, nhưng những gì "nên" không phải là vốn có "là". Tôi sẽ đi sâu một chút với điều này theo mặc định, vì nó xuất hiện chỉ có ba người thực sự trả lời câu hỏi (Scott, goofballLogic, và peller cụ thể) mà, với 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 specifier định dạng được hỗ trợ bởi đối tượng Date () ở đâu?


Để trả lời câu hỏi, hoặc 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; nó 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ập 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 sớm LiveScript / JavaScript). 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 yêu cầu (tháng 6 năm09), tiêu chuẩn là 3 (4 đã bị hủy bỏ), nhưng 5 đã được phát hành ngay sau khi bài đăng vào cuối năm 2009. Điều này cần phác thảo một vấn đề; những gì tiêu chuẩn thực hiện javascript có thể làm theo, có thể không phản ánh những gì thực sự tại chỗ, bởi vì a) nó là một thực hiện của 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 là puritan, và c) chức năng không được phát hành đồng bộ hóa với một tiêu chuẩn mới là d) việc triển khai là một công việc liên tục đang được tiến hành

Về cơ bản, khi giao dịch với javascript, bạn đang giao dịch với một dẫn xuất (javascript cụ thể cho trình duyệt) của việc triển khai (chính javascript). Ví dụ: V8 của Google, triển khai ECMAScript 5.0, nhưng JScript của Internet Explorer không cố gắng tuân theo bất kỳ tiêu chuẩn ECMAScript nào, nhưng Internet Explorer 9 không phù hợp với ECMAScript 5.0.

Khi một đối số được chuyển đến Date () mới, nó sẽ tạo ra nguyên mẫu hàm này:

new Date(value)

Khi hai hoặc nhiều đối số được chuyển đến Date () mới, nó sẽ tạo ra 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 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 tháng có thể chấp nhận được, yêu cầu giải thích thêm. Khi bạn chuyển một chuỗi thành Date () 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 lỏng lẻo; các phiên bản có thể là các hàm riêng lẻ hoặc có thể là một phần của câu lệnh có điều kiện trong một hàm duy nhất) cho new Date (giá trị) với chuỗi của bạn làm đối số cho tham số "giá trị". Trước tiên, hàm này sẽ kiểm tra xem đó là một số hay một chuỗi. Tài liệu cho chức năng này có thể tìm thấy ở đây:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

Từ đó, chúng ta có thể suy ra rằng để có được định dạng chuỗi được phép cho Date (giá trị) mới, chúng ta phải xem phương thức Date.parse (chuỗi). Các tài liệu cho phương pháp này có thể được tìm thấy ở đây:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

Và chúng tôi có thể suy ra thêm rằng các ngày được dự kiến ​​sẽ ở định dạng mở rộng ISO 8601 được sửa đổi, như được chỉ định ở đây:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

Tuy nhiên, chúng ta có thể nhận ra từ kinh nghiệm rằng đối tượng Date 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 ngay từ đầu), và điều này là ổn 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 được câu hỏi về tài liệu nào có sẵn trên các định dạng có sẵn, cũng như các định dạng nào thực sự được cho 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 cho rằng đây là công cụ javascript "tốt nhất" (cách có thể xác định "tốt nhất" hoặc thậm chí "tốt") và không thể giả định 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ĩ để cho rằng họ làm theo những kỳ vọng hiện đại.

V8, date.js, DateConstructor của Google

https://code.google.com/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 chúng ta cần tìm hàm DateParse; tuy nhiên, lưu ý rằng "năm" không phải là năm thực tế và chỉ là tham chiếu đến tham số "năm".

V8 của Google, date.js, DateParse

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

Điều này gọi hàm% DateParseString, đây thực sự là 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,% DateParseString

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

Hàm gọi hàm mà chúng ta quan tâm trong hàm này là cho DateParser :: Parse (); bỏ qua logic xung quanh các cuộc gọi chức năng, đây chỉ là kiểm tra để phù hợp với loại mã hóa (ASCII và UC16). DateParser :: Parse được định nghĩa ở đây:

V8, dateparser-inl.h của Google, DateParser :: Parse

https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

Đây là hàm thực sự định nghĩa các định dạng mà nó chấp nhận. Về cơ bản, nó kiểm tra chuẩn EMCAScript 5.0 ISO 8601 và nếu nó không tuân thủ các 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 kế thừa. Một vài điểm chính dựa trên nhận xét:

  1. Các từ trước số đầu tiên chưa được phân tích cú pháp được bỏ qua.
  2. Văn bản được viết hoa được bỏ qua.
  3. Các số chưa được ký theo sau là “:” được hiểu là “thành phần thời gian”.
  4. Các số chưa được ký theo sau là “.” Được hiểu là “thành phần thời gian” và phải được theo sau bởi mili giây.
  5. Số đã ký theo sau là giờ hoặc giờ (ví dụ: +5: 15 hoặc +0515) được hiểu là múi giờ.
  6. Khi khai báo giờ và phút, bạn có thể sử dụng “hh: mm” hoặc “hhmm”.
  7. Các từ chỉ ra múi giờ được hiểu là múi giờ.
  8. Tất cả các số khác được hiểu là "thành phần ngày".
  9. 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.
  10. Bạn có thể xác định phút và giờ với nhau ở một trong hai định dạng: “hh: mm” hoặc “hhmm”.
  11. Các biểu tượng như “+”, “-“ và chưa từng có “)” không được phép sau khi một số đã được xử lý.
  12. 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 chuẩn EMCAScript 5.0 ISO 8601 tương thích 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 nói đến việc truyề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 trỏ tới trên Mạng nhà phát triển Mozilla (tuân theo các dấu thời gian IETF RFC 2822):

http://tools.ietf.org/html/rfc2822#page-14

Mạng Nhà phát triển Microsoft cũng đề cập thêm một tiêu chuẩn bổ sung cho đối tượng Ngày: ECMA-402, Đặc tả API Quốc tế hóa ECMAScript, bổ sung cho tiêu chuẩn ECMAScript 5.1 (và các tiêu chuẩn tương lai). Điều đó có thể được tìm thấy ở đây:

http://www.ecma-international.org/ecma-402/1.0/

Trong mọi trường hợp, điều này sẽ hỗ trợ làm nổi bật rằng không có "tài liệu" đại diện cho tất cả việc triển khai javascript, nhưng vẫn có đủ tài liệu để có ý nghĩa hợp lý về những chuỗi được chấp nhận cho đối tượng Ngày. Khá câu hỏi khi bạn nghĩ về nó, đúng không? : P

Tài liệu tham khảo

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

http://tools.ietf.org/html/rfc2822#page-14

http://www.ecma-international.org/ecma-402/1.0/

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

https://code.google.com/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/library/ff743760(v=vs.94).aspx


121
2017-11-19 11:31





Đảm bảo bạn thanh toán Datejs khi xử lý các ngày trong JavaScript. Nó khá ấn tượng và được ghi lại đầy đủ như bạn có thể thấy trong trường hợp hàm toString.

CHỈNH SỬA: Tyler Forsythe chỉ ra, rằng datejs là lỗi thời. Tôi sử dụng nó trong dự án hiện tại của tôi và không có bất kỳ rắc rối với nó, tuy nhiên bạn nên biết điều này và xem xét lựa chọn thay thế.


91
2017-09-07 03:23



Đây là một thư viện tuyệt vời. Tôi đã tạo ra một phiên bản của riêng tôi, nhưng tôi đã loại bỏ dự án đó để ủng hộ việc sử dụng nó. Cảm ơn các liên kết!!!! (bạn có thể nói tôi rất vui) - John Livermore
Tôi không thể tìm cách để cập nhật ngày tháng bằng mili giây để tạo ngày. Giống như vậy: var dateTime = new Date (); dateTime.setTime (mili giây); - Arne Evertsson
25k? Chỉ cần hẹn hò? Ouch. - Ben Lesh
Datejs là một thư viện đã lỗi thời chưa thấy sự phát triển tích cực trong ~ 5 năm. Nguồn của họ là trên Github và Google Code và cả hai đều có ngày cập nhật cuối cùng của năm 2008 (đó là năm 2013). Vì lợi ích của sự tỉnh táo của bạn, hãy sử dụng XDate hoặc Moment.js. - Tyler Forsythe
@TylerForsythe Tôi đã thêm một gợi ý / cảnh báo về điều đó. - Tim Büthe


Bạn chỉ có thể mở rộng Date Đối tượng với một format phương pháp như được ghi nhận bởi meizz, bên dưới là mã do tác giả đưa ra. Và đây là jsfiddle.

Date.prototype.format = function(format) //author: meizz
{
  var o = {
    "M+" : this.getMonth()+1, //month
    "d+" : this.getDate(),    //day
    "h+" : this.getHours(),   //hour
    "m+" : this.getMinutes(), //minute
    "s+" : this.getSeconds(), //second
    "q+" : Math.floor((this.getMonth()+3)/3),  //quarter
    "S" : this.getMilliseconds() //millisecond
  }

  if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
    (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  for(var k in o)if(new RegExp("("+ k +")").test(format))
    format = format.replace(RegExp.$1,
      RegExp.$1.length==1 ? o[k] :
        ("00"+ o[k]).substr((""+ o[k]).length));
  return format;
}

alert(new Date().format("yyyy-MM-dd"));
alert(new Date("january 12 2008 11:12:30").format("yyyy-MM-dd h:mm:ss"));

68
2017-08-31 09:59



Tăng cường nó một chút cho mục đích của tôi để hỗ trợ AM / PM - xem bên dưới - Michael Angstadt
@WHK Nhưng tôi vẫn thích momentjs hơn: D - gongzhitaao
Có vấn đề khi chụp tháng: ngày mới ((ngày mới ()) định dạng ('yyyy-MM-dd')) trả về Có thể nhưng bây giờ là tháng Sáu: - / whoto sử dụng múi giờ trong chuỗi phân tích cú pháp? - e-info128
console.log (ngày mới ('2014-06-12')); -> Jun || console.log (ngày mới ('2014-06-01')); -> Có thể ??? - e-info128
@WHK Đây thực sự là một trình phân tích cú pháp ngày rất nguyên thủy. Chỉ trong trường hợp bạn không phải gây rối với ngày quá nhiều. Nếu bạn thực sự cần phải đối phó với các định dạng khác nhau của ngày, tôi sẽ giới thiệu một thư viện độc lập như momentjs. : D - gongzhitaao


Chức năng bạn trích dẫn không phải là Javascript chuẩn, không có khả năng di động trên các trình duyệt và do đó không thực hành tốt. Các Thông số ECMAScript 3 để các phân tích cú pháp và các định dạng đầu ra hoạt động cho tới việc triển khai Javascript. ECMAScript 5 thêm một tập con của hỗ trợ ISO8601. Tôi tin rằng hàm toString () mà bạn đề cập là một sự đổi mới trong một trình duyệt (Mozilla?)

Một số thư viện cung cấp các thường trình để tham số hóa điều này, một số thư viện có hỗ trợ bản địa hóa rộng rãi. Bạn cũng có thể kiểm tra các phương pháp trong dojo.date.locale.


35
2018-01-17 22:19



Cố gắng thực sự trả lời câu hỏi sẽ không giúp bạn có nhiều phiếu bầu. Chỉ cần chỉ định một thư viện phổ biến và xem số điểm của bạn bay !! - RobG