Cách định dạng ngày JavaScript


2221

Trong JavaScript, làm cách nào tôi có thể định dạng một đối tượng ngày để in thành 10-Aug-2010?


204
Như thường lệ: hãy cẩn thận THÁNG LÀ KHÔNG GIỚI HẠN! Vì vậy, tháng giêng là con số không ...
Barshe Roussy

12
Cũng hãy cẩn thận, myDate.getDay()không trả lại ngày trong tuần, nhưng vị trí của ngày trong tuần liên quan đến tuần. myDate.getDate()trả về các ngày trong tuần hiện tại .
Jimenemex

3
Để định dạng DateTimes trong javascript, hãy sử dụng Intl.DateTimeFormatđối tượng. Tôi mô tả nó trong bài viết của tôi: Bài viết . Tôi tạo một giải pháp trực tuyến cho câu trả lời của bạn bằng cách Intl.DateTimeFormat Kiểm tra trực tuyến
Iman Bahrampour

5
Bạn có thể sử dụngtoLocaleDateString
onmyway133

12
Phải mất javascript rất lâu để có được URL là một đối tượng được tiêu chuẩn hóa, nơi bạn có thể lấy ra một khóa truy vấn, lấy giao thức, lấy tên miền cấp cao nhất, v.v. Họ có thể tạo ES6 ES7 nhưng vẫn không thể đặt ngày chuẩn định dạng thời gian / trình phân tích cú pháp năm 2019? Cứ như thể họ đang nghĩ "hmmm vâng ... những người trên trái đất sử dụng javascript sẽ có nhu cầu xử lý thời gian và ngày một cách thường xuyên ...."
ahnbizcad

Câu trả lời:


1289

Đối với các định dạng ngày được phân tách tùy chỉnh, bạn phải lấy các thành phần ngày (hoặc thời gian) từ một DateTimeFormatđối tượng (là một phần của API quốc tế hóa ECMAScript ), sau đó tạo thủ công một chuỗi với các dấu phân cách bạn muốn.

Để làm điều này, bạn có thể sử dụng DateTimeFormat#formatToParts:

const date = new Date('2010-08-05')
const dateTimeFormat = new Intl.DateTimeFormat('en', { year: 'numeric', month: 'short', day: '2-digit' }) 
const [{ value: month },,{ value: day },,{ value: year }] = dateTimeFormat .formatToParts(date ) 

console.log(`${day}-${month}-${year }`)
console.log(`${day}👠${month}👢${year}`) // just for fun

Bạn cũng có thể rút từng bộ phận của DateTimeFormattừng người một bằng cách sử dụng DateTimeFormat#format, nhưng lưu ý rằng khi sử dụng phương pháp này, kể từ tháng 3 năm 2020, có một lỗi trong việc triển khai ECMAScript khi dẫn đến các số 0 trong vài phút và giây (lỗi này bị phá vỡ bởi cách tiếp cận ở trên).

const d = new Date('2010-08-05')
const ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d)
const mo = new Intl.DateTimeFormat('en', { month: 'short' }).format(d)
const da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d)

console.log(`${da}-${mo}-${ye}`)

Khi làm việc với ngày và thời gian, thường đáng để sử dụng thư viện (ví dụ: Moment.js , luxon ) vì nhiều phức tạp ẩn của trường.

Lưu ý rằng API quốc tế hóa ECMAScript, được sử dụng trong các giải pháp trên không được hỗ trợ trong IE10 ( 0,03% thị phần trình duyệt toàn cầu vào tháng 2 năm 2020).


370
Thực sự xem xét sử dụng một thư viện như Moment.js hoặc Date.js thay thế. Vấn đề này đã được giải quyết nhiều lần.
Benjamin Oakes

242
Tại sao chúng không bao gồm một hàm trong Dateđối tượng để làm điều này?
Naya

68
Một điểm quan trọng là phương thức getMonth () trả về chỉ số tháng dựa trên 0, ví dụ: tháng 1 sẽ trả về 0 tháng 2 sẽ trả về 1, v.v ...
Marko

6
Moment.js 2.9.0 là 11,6k được nén, ví dụ này là 211 byte được nén.
mrzmyr 30/03/2015

26
Cần lưu ý rằng bạn không bao giờ nên sử dụng document.write (). Vấn đề an ninh và hiệu suất rất lớn.
Matt Jensen

2008

Nếu bạn cần kiểm soát định dạng ít hơn một chút so với câu trả lời hiện được chấp nhận, Date#toLocaleDateStringcó thể được sử dụng để tạo kết xuất cụ thể theo địa phương tiêu chuẩn. Các đối số localeoptionscho phép các ứng dụng chỉ định ngôn ngữ có các quy ước định dạng sẽ được sử dụng và cho phép một số tùy chỉnh kết xuất.

Tùy chọn ví dụ chính:

  1. day:
    Đại diện của ngày.
    Các giá trị có thể là "số", "2 chữ số".
  2. ngày trong tuần:
    Đại diện của ngày trong tuần.
    Các giá trị có thể là "hẹp", "ngắn", "dài".
  3. năm:
    Đại diện của năm.
    Các giá trị có thể là "số", "2 chữ số".
  4. tháng:
    Đại diện của tháng.
    Các giá trị có thể là "số", "2 chữ số", "hẹp", "ngắn", "dài".
  5. giờ:
    Đại diện của giờ.
    Các giá trị có thể là "số", "2 chữ số".
  6. phút: Đại diện của phút.
    Các giá trị có thể là "số", "2 chữ số".
  7. thứ hai:
    Đại diện của thứ hai.
    Các giá trị có thể là "số", 2 chữ số ".

Tất cả các phím này là tùy chọn. Bạn có thể thay đổi số lượng giá trị tùy chọn dựa trên yêu cầu của bạn và điều này cũng sẽ phản ánh sự hiện diện của mỗi thời hạn ngày.

Lưu ý: Nếu bạn chỉ muốn định cấu hình các tùy chọn nội dung, nhưng vẫn sử dụng ngôn ngữ hiện tại, việc truyền nulltham số đầu tiên sẽ gây ra lỗi. Sử dụngundefined thay thế.

Đối với các ngôn ngữ khác nhau:

  1. "en-US": Dành cho tiếng Anh
  2. "hi-IN": Dành cho tiếng Hindi
  3. "ja-JP": Dành cho người Nhật

Bạn có thể sử dụng nhiều tùy chọn ngôn ngữ hơn.

Ví dụ

var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
var today  = new Date();

console.log(today.toLocaleDateString("en-US")); // 9/17/2016
console.log(today.toLocaleDateString("en-US", options)); // Saturday, September 17, 2016
console.log(today.toLocaleDateString("hi-IN", options)); // शनिवार, 17 सितंबर 2016

Bạn cũng có thể sử dụng toLocaleString()phương pháp cho cùng một mục đích. Sự khác biệt duy nhất là chức năng này cung cấp thời gian khi bạn không vượt qua bất kỳ tùy chọn nào.

// Example
9/17/2016, 1:21:34 PM

Người giới thiệu:


45
Đã gần như sắp sử dụng moment.jscho một định dạng đơn giản. May mắn thay đã tìm kiếm thêm google và tìm thấy đã có API gốc làm điều này. Lưu một phụ thuộc bên ngoài. Tuyệt vời!
LeOn - Han Li

21
Có vẻ như câu trả lời này sẽ là câu trả lời "hiện tại" tốt nhất. Cũng sử dụng tùy chọn "giờ12: đúng" để sử dụng định dạng 12 giờ so với 24 giờ. Có lẽ nên được thêm vào danh sách tóm tắt của bạn trong câu trả lời.
Doug Knudsen

14
Tôi không nhận được những đánh giá cao về câu trả lời này. Nó không giải quyết vấn đề trong câu hỏi. (tức là cho tôi một ngày giống như ngày 10 tháng 8 năm 2010). Sử dụng toLocaleDateString () khá khó khăn. Thư viện date.format dường như là giải pháp tốt hơn (ít nhất là đối với người dùng Node)
Iarwa1n

3
Nếu truyền undefinedlàm tham số miền địa phương đầu tiên cảm thấy tùy ý, thay vào đó, bạn có thể chuyển giá trị "default"để sử dụng cài đặt ngôn ngữ của trình duyệt, theo MDN docs developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
tựa

3
@ Iarwa1n Câu trả lời này chưa được đề cập nhưng bạn có thể sử dụng toLocaleDateString để chỉ trả lại một số phần nhất định mà sau đó bạn có thể tham gia nếu muốn. Kiểm tra câu trả lời của tôi dưới đây. date.toLocaleDateString("en-US", { day: 'numeric' }) + "-"+ date.toLocaleDateString("en-US", { month: 'short' }) + "-" + date.toLocaleDateString("en-US", { year: 'numeric' })nên cho16-Nov-2019
K Vij

609

Sử dụng thư viện date.format :

var dateFormat = require('dateformat');
var now = new Date();
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");

trả về:

Saturday, June 9th, 2007, 5:46:21 PM 

dateformat vào npm

http://jsfiddle.net/phZr7/1/


4
điều này có vẻ giống như giải pháp dài hơn nhưng được nén và sử dụng trên một trang web sử dụng ngày một chút công bằng sẽ là giải pháp tốt hơn!
RobertPitt

5
Giải pháp này cũng có sẵn dưới dạng gói npm
David

19
Có 14 vấn đề mở với plugin trên. Thậm chí tôi còn tìm thấy một :(
Amit Kumar Gupta

6
Tôi nhận đượcrequire is not defined
Hooli

16
OP đã yêu cầu giải pháp JS
Luke Pring

523

Nếu bạn cần một cách nhanh chóng định dạng ngày của bạn sử dụng thuần JavaScript, sử dụng getDate, getMonth + 1, getFullYear, getHoursgetMinutes:

var d = new Date();

var datestring = d.getDate()  + "-" + (d.getMonth()+1) + "-" + d.getFullYear() + " " +
d.getHours() + ":" + d.getMinutes();

// 16-5-2015 9:50

Hoặc, nếu bạn cần nó được đệm bằng số không:

var datestring = ("0" + d.getDate()).slice(-2) + "-" + ("0"+(d.getMonth()+1)).slice(-2) + "-" +
    d.getFullYear() + " " + ("0" + d.getHours()).slice(-2) + ":" + ("0" + d.getMinutes()).slice(-2);

// 16-05-2015 09:50

Bạn có thể cho biết làm thế nào để có được định dạng như thứ Hai, ngày 23 tháng 3 năm 2018 ??
Sachin HR

@SachinHR, xem câu trả lời trước: stackoverflow.com/a 432015511/4161032 . Có toLocaleDateString()thể định dạng ngày bằng cách sử dụng tên tháng / ngày địa phương.
sebastian.i

12
bạn cũng có thể đệm số không với.toString().padStart(2, '0')
Benny Jobigan

1
@DmitryoN, nếu cần, năm có thể được đệm theo cùng một cách:("000" + d.getFullYear()).slice(-4)
sebastian.i

4
@BennyJobigan Cần được đề cập rằng String.padStart()chỉ có sẵn từ ECMAScript 2017.
JHH

413

Chà, điều tôi muốn là chuyển đổi ngày hôm nay thành chuỗi ngày thân thiện với MySQL như 2012-06-23 và sử dụng chuỗi đó làm tham số trong một trong các truy vấn của tôi. Giải pháp đơn giản tôi đã tìm thấy là:

var today = new Date().toISOString().slice(0, 10);

Hãy nhớ rằng giải pháp trên không tính đến phần bù múi giờ của bạn.

Bạn có thể cân nhắc sử dụng chức năng này thay thế:

function toJSONLocal (date) {
    var local = new Date(date);
    local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
    return local.toJSON().slice(0, 10);
}

Điều này sẽ cung cấp cho bạn ngày chính xác trong trường hợp bạn đang thực thi mã này vào khoảng thời gian bắt đầu / kết thúc ngày.


9
Bạn có thể làm new Date(date + " UTC")để lừa múi giờ và bạn có thể loại bỏ dòng setMinutes. Man, javascript là bẩn
Vajk Hermecz

23
Phiên bản tương thích Y10K: var today = new Date().toISOString().slice(0,-14):)
Alex Shaffer

23
Hoặc như thế nàynew Date().toISOString().split('T')[0]
rofrol

4
new Date().toISOString().slice(0, 16).replace('T',' ')để bao gồm thời gian
Gerrie van Wyk

3
Chỉ cần bình luận rằng việc thiếu múi giờ không phải là một sự bất tiện nhỏ "vào khoảng thời gian bắt đầu / kết thúc ngày". Chẳng hạn ở Úc, ngày có thể sai cho đến khoảng 11 giờ sáng - gần một nửa ngày!
Steve Bennett

230

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

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

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

console.log(dateToYMD(new Date(2017,10,5))); // Nov 5

Định dạng OP có thể được tạo như sau:

function dateToYMD(date) {
    var strArray=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    var d = date.getDate();
    var m = strArray[date.getMonth()];
    var y = date.getFullYear();
    return '' + (d <= 9 ? '0' + d : d) + '-' + m + '-' + y;
}
console.log(dateToYMD(new Date(2017,10,5))); // Nov 5

Lưu ý: Tuy nhiên, thông thường không nên mở rộng các thư viện chuẩn JavaScript (ví dụ: bằng cách thêm chức năng này vào nguyên mẫu của Ngày).

Một chức năng nâng cao hơn có thể tạo đầu ra có thể định cấu hình dựa trên tham số định dạng.

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

Các chức năng định dạng ECMAScript tiêu chuẩn:

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

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

http: //www.ecma-i Intl.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-i Intl.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring

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

toJSON : Trình tạo chuỗi cho JSON.

http: //www.ecma-i Intl.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 miền địa phương.

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

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

toLocaleString : Phụ thuộc triển khai, ngày & giờ ở định dạng miền địa phương.

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

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

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

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

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

: Chung toString cho ngày.

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

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

Lưu ý: có thể tạo đầu ra tùy chỉnh từ các định dạng đó>

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

Ví dụ đoạn trích:

console.log("1) "+  new Date().toDateString());
console.log("2) "+  new Date().toISOString());
console.log("3) "+  new Date().toJSON());
console.log("4) "+  new Date().toLocaleDateString());
console.log("5) "+  new Date().toLocaleString());
console.log("6) "+  new Date().toLocaleTimeString());
console.log("7) "+  new Date().toString());
console.log("8) "+  new Date().toISOString().slice(0,10));


3
Cảm ơn vì cái cuối cùng .. Hữu ích cho việc đặt giá trị ngày của các đầu vào Ngày HTML.
daCoda

new Date().toLocaleDateString()cung cấp cho bạn mm/dd/yyyykhông dd/mm/yyyyxin vui lòng sửa cái đó.
Aarvy

1
@RajanVerma: toLocaleDateString cung cấp ngôn ngữ của bạn, có thể là mm / dd / yyyy vì bạn đang ở Hoa Kỳ. Ở đây, miền địa phương cho ngày là dd / mm / yyyy (đó chính xác là điểm của "miền địa phương"). Tôi đã viết "vd" bởi vì nó không phải là đặc điểm kỹ thuật, mà là một ví dụ về đầu ra.
Adrian Maire

177

Nếu bạn đã sử dụng jQuery UI trong dự án của mình, bạn có thể làm theo cách này:

var formatted = $.datepicker.formatDate("M d, yy", new Date("2014-07-08T09:02:21.377"));

// formatted will be 'Jul 8, 2014'

Một số tùy chọn định dạng ngày tháng để chơi với có sẵn ở đây .


13
Như tôi đã nói - nếu jQueryUI đã được sử dụng trong dự án - tại sao không sử dụng lại chức năng định dạng ngày tháng? Chào các bạn, tôi không nhấn mạnh tại sao tôi lại bỏ phiếu tiêu cực cho câu trả lời của mình? Vui lòng giải thích.
Dmitry Pavlov

7
Có thể là do ai đó có thể bao gồm Giao diện người dùng jQuery chỉ cho chức năng định dạng ngày hoặc có thể là do công cụ hẹn hò là một phần tùy chọn của thư viện, nhưng có lẽ đó là vì ghét jQuery là mốt.
sennett

12
Tôi không nghĩ rằng có thể tránh hoàn toàn tất cả các quyết định kỳ lạ mà ai đó có thể làm do nhầm lẫn hoặc do vô ý.
Dmitry Pavlov

7
@sennett: Ghét jQuery là mốt? Vì vậy, đi bộ với quần của bạn xuống một nửa chân của bạn, tôi cho rằng ... đó là khá nhiều những gì cố gắng viết mã mà không có jQuery giống như trong hầu hết lịch sử của JavaScript ...
Michael Scheper

5
Trong mọi trường hợp, đây là một câu trả lời hữu ích và hoàn toàn hợp lý một lần nữa, 70% các trang web sử dụng jQuery. Nó không nên bị hạ thấp vì niềm tin tôn giáo của các nhà phát triển.
Michael Scheper

133

Tôi nghĩ bạn chỉ có thể sử dụng phương pháp Ngày không chuẩntoLocaleFormat(formatString)

formatString: Một chuỗi định dạng có cùng định dạng được mong đợi bởi strftime()hàm trong C.

var today = new Date();
today.toLocaleFormat('%d-%b-%Y'); // 30-Dec-2011

Người giới thiệu:


160
toLocaleFormat () dường như chỉ hoạt động trong Firefox. Cả IE và Chrome đều thất bại đối với tôi.
fitzgeraldsteele

16
Chrome có phương thức .toLocaleString ('en'). Như có vẻ như hỗ trợ trình duyệt mới này developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
apocalypz


6
đây sẽ là giải pháp tốt nhất nếu mọi người có thể thực hiện nó. chết tiệt bạn tức là / chrome
santa

6
@santa: Thật vậy. Có thể có một lý do hợp lý để không tuân theo sự dẫn dắt của Mozilla về vấn đề này, nhưng thực tế là ngay cả ES6 cũng không có chức năng tiêu chuẩn cho thấy điều này vẫn là ngôn ngữ của hacker, không phải ngôn ngữ của nhà phát triển.
Michael Scheper

105

Plain JavaScript là lựa chọn tốt nhất cho các onetimers nhỏ.

Mặt khác, nếu bạn cần thêm công cụ hẹn hò, MomentJS là một giải pháp tuyệt vời.

Ví dụ:

moment().format('YYYY-MM-DD HH:m:s');     // now() -> 2015-03-24 14:32:20
moment("20111031", "YYYYMMDD").fromNow(); // 3 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
moment().startOf('day').fromNow();        // 11 hours ago
moment().endOf('day').fromNow();          // in 13 hours

2
điều quan trọng cần đề cập: không sử dụng YYYYtrừ khi bạn biết sự khác biệt giữa YYYYyyyy: stackoverflow.com/questions/15133549/
mẹo

@Domin đặc trưng cho NSDateFormatter trong iOS, như được sử dụng từ ví dụ: Objective-C hoặc Swift. Câu hỏi này là về Javascript trong trình duyệt và câu trả lời này sử dụng MomentJS, trong đó YYYY(không yyyy) là năm tiêu chuẩn và GGGG(không YYYY) là năm dựa trên ISO.
Mark Reed

2
Khoảnh khắc 100% không lỗi thời @Gerry
Liam

97

Trong các trình duyệt hiện đại (*) , bạn có thể thực hiện việc này:

var today = new Date().toLocaleDateString('en-GB', {
    day : 'numeric',
    month : 'short',
    year : 'numeric'
}).split(' ').join('-');

Đầu ra nếu được thực hiện hôm nay (ngày 24 tháng 1 năm 2016):

'24-Jan-2016'

(*) Theo MDN , "trình duyệt hiện đại" có nghĩa là Chrome 24+, Firefox 29+, Internet Explorer 11, Edge 12+, Opera 15+ & Safari xây dựng hàng đêm .


Có cách nào để kiểm tra xem chức năng này có được hỗ trợ không và nếu không, mặc định là giải pháp đơn giản hơn?
James Wierzba

@JamesWierzba: Bạn có thể sử dụng polyfill này !
John Slegers

Điều này thậm chí không được liệt kê trên caniuse.com: /
Charles Wood

51

Bạn nên có một cái nhìn tại date.js . Nó thêm nhiều trợ giúp thuận tiện để làm việc với ngày, ví dụ, trong trường hợp của bạn:

var date = Date.parse('2010-08-10');
console.log(date.toString('dd-MMM-yyyy'));

Bắt đầu: http://www.datejs.com/2007/11/27/getting-started-with-datejs/


Cảm ơn. Đây là một thư viện rất toàn diện và đầy đủ, với một dấu chân nhỏ.
mitcheljh

Tôi nghĩ hiện tại tôi đang nhận được một số từ Date.parse trong khi let date = new Date (fromString) có nhiều chức năng hơn. Thật không may, tôi rất ngạc nhiên khi toString dường như chỉ hiển thị một mặc định mà không diễn giải đối số được thông qua để định dạng nó. Sử dụng NodeJS 11+ toDateString là một đầu ra ngắn hơn nhưng không có định dạng. Tất cả những gì tôi thấy là một toCocaleDateString rất phức tạp
Master James

38

Tôi có thể nhận định dạng được yêu cầu của bạn trong một dòng mà không cần thư viện và không có phương thức Ngày, chỉ cần regex:

var d = (new Date()).toString().replace(/\S+\s(\S+)\s(\d+)\s(\d+)\s.*/,'$2-$1-$3');
// date will be formatted as "14-Oct-2015" (pass any date object in place of 'new Date()')

Trong thử nghiệm của tôi, điều này hoạt động đáng tin cậy trong các trình duyệt chính (Chrome, Safari, Firefox và IE.) Như @RobG đã chỉ ra, đầu ra của Date.prototype.toString () phụ thuộc vào việc triển khai, vì vậy chỉ cần kiểm tra đầu ra để chắc chắn nó hoạt động ngay trong công cụ JavaScript của bạn. Bạn thậm chí có thể thêm một số mã để kiểm tra đầu ra chuỗi và đảm bảo nó khớp với những gì bạn mong đợi trước khi bạn thực hiện thay thế regex.


console.log(new Date().toString().replace(/\S+\s(\S+)\s(\d+)\s(\d+)\s.*/,'$2-$1-$3'));
Giăng

@ André - Tôi đồng ý. Nếu đây là mã của tôi, tôi chắc chắn sẽ bao gồm một nhận xét bên cạnh nó giải thích biểu thức chính quy và đưa ra một ví dụ về đầu vào và đầu ra tương ứng.
JD Smith

Làm thế nào về phần thời gian (HH: mm: ss)?
kiểm soát

@unrulerboy var d = (Ngày mới ()). toString (). thay thế (/ \ S + \ s (\ S +) \ s (\ d +) \ s (\ d +) \ s (\ S +) \ s. * / , '$ 2- $ 1- $ 3 $ 4'); - hoặc để chỉ lấy phần thời gian mà không có ngày, hãy sử dụng: var d = (ngày mới ()). toString (). thay thế (/ \ S + \ s (\ S +) \ s (\ d +) \ s (\ d +) \ s (\ S +) \ s. * /, '$ 4');
JD Smith

37

@ Sébastien - thay thế tất cả các hỗ trợ trình duyệt

new Date(parseInt(496407600)*1000).toLocaleDateString('de-DE', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
}).replace(/\./g, '/');

Tài liệu: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString


5
Thay vì làm .replace (), bạn chỉ có thể sử dụng 'en-GB' làm ngôn ngữ. :)
Roberto14

1
Điều này thực sự tốt, ví dụ như new Date().toLocaleDateString("en-EN", {month: "short", weekday: "short", day: "2-digit", year: "numeric"})trả về"Wed, Sep 06, 2017"
Peter T.

37

OK , chúng tôi đã có một thứ gọi là Intl rất hữu ích để định dạng một ngày trong JavaScript những ngày này:

Ngày của bạn như sau:

var date = '10/8/2010';

Và bạn thay đổi thành Ngày bằng cách sử dụng Ngày mới () như bên dưới:

date = new Date(date);

Và bây giờ bạn có thể định dạng nó theo bất kỳ cách nào bạn muốn bằng cách sử dụng danh sách các địa điểm như bên dưới:

date = new Intl.DateTimeFormat('en-AU').format(date); // Australian date format: "8/10/2010" 


date = new Intl.DateTimeFormat('en-US').format(date); // USA date format: "10/8/2010" 


date = new Intl.DateTimeFormat('ar-EG').format(date);  // Arabic date format: "٨‏/١٠‏/٢٠١٠"

Nếu bạn chính xác muốn định dạng bạn đã đề cập ở trên, bạn có thể làm:

date = new Date(Date.UTC(2010, 7, 10, 0, 0, 0));
var options = {year: "numeric", month: "short", day: "numeric"};
date = new Intl.DateTimeFormat("en-AU", options).format(date).replace(/\s/g, '-');

Và kết quả sẽ là:

"10-Aug-2010"

Để biết thêm, hãy xem tài liệu Intl APIIntl.DateTimeFormat .


Không được IE hỗ trợ
Quần

Đó là nhưng chỉ bởi IE11, IE10- đã không còn tồn tại trước khi điều này tồn tại nên không thể hiểu được. 92% từ caniuse, khá tốt là caniuse.com/#search=datetimeformat
Tofandel

32

Sử dụng mẫu chuỗi ECMAScript Phiên bản 6 (ES6 / ES2015):

let d = new Date();
let formatted = `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`;

Nếu bạn cần thay đổi dấu phân cách:

const delimiter = '/';
let formatted = [d.getFullYear(), d.getMonth() + 1, d.getDate()].join(delimiter);

30

Giải pháp đóng gói: Luxon

Nếu bạn muốn sử dụng một giải pháp để phù hợp với tất cả, tôi khuyên bạn nên sử dụng Luxon (phiên bản hiện đại hóa của Moment.js ) cũng định dạng theo nhiều ngôn ngữ / ngôn ngữ và hàng tấn các tính năng khác.

Luxon được lưu trữ trên trang web của Moment.js và được phát triển bởi nhà phát triển Moment.js vì Moment.js có những hạn chế mà nhà phát triển muốn giải quyết nhưng không thể.

Để cài đặt:

npm install luxonhoặc yarn add luxon(truy cập liên kết cho các phương pháp cài đặt khác)

Thí dụ:

luxon.DateTime.fromISO('2010-08-10').toFormat('yyyy-LLL-dd');

Sản lượng:

Ngày 10 tháng 8 năm 2010

Giải pháp thủ công

Sử dụng định dạng tương tự như Moment.js, Class DateTimeFormatter (Java) Class SimpleDateFormat (Java) , tôi đã triển khai một giải pháp toàn diệnformatDate(date, patternStr) trong đó mã dễ đọc và sửa đổi. Bạn có thể hiển thị ngày, giờ, AM / PM, v.v ... Xem mã để biết thêm ví dụ.

Thí dụ:

formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss:S')

(formatDate được triển khai trong đoạn mã dưới đây)

Sản lượng:

Thứ Sáu, ngày 12 tháng 10 năm 2018 18: 11: 23: 445

Hãy thử mã bằng cách nhấp vào "Chạy đoạn mã."

Mẫu ngày và giờ

yy = Năm có 2 chữ số; yyyy= cả năm

M= chữ số tháng; MM= Tháng có 2 chữ số; MMM= tên tháng ngắn;MMMM= tên tháng

EEEE= tên ngày trong tuần đầy đủ; EEE= tên ngày trong tuần ngắn

d= ngày chữ số; dd= Ngày có 2 chữ số

h= giờ sáng / chiều; hh= 2 chữ số giờ sáng / chiều; H= giờ; HH= Giờ có 2 chữ số

m= phút; mm= Phút 2 chữ số; aaa= Sáng / chiều

s= giây; ss= 2 chữ số giây

S = milis giây

var monthNames = [
  "January", "February", "March", "April", "May", "June", "July",
  "August", "September", "October", "November", "December"
];
var dayOfWeekNames = [
  "Sunday", "Monday", "Tuesday",
  "Wednesday", "Thursday", "Friday", "Saturday"
];
function formatDate(date, patternStr){
    if (!patternStr) {
        patternStr = 'M/d/yyyy';
    }
    var day = date.getDate(),
        month = date.getMonth(),
        year = date.getFullYear(),
        hour = date.getHours(),
        minute = date.getMinutes(),
        second = date.getSeconds(),
        miliseconds = date.getMilliseconds(),
        h = hour % 12,
        hh = twoDigitPad(h),
        HH = twoDigitPad(hour),
        mm = twoDigitPad(minute),
        ss = twoDigitPad(second),
        aaa = hour < 12 ? 'AM' : 'PM',
        EEEE = dayOfWeekNames[date.getDay()],
        EEE = EEEE.substr(0, 3),
        dd = twoDigitPad(day),
        M = month + 1,
        MM = twoDigitPad(M),
        MMMM = monthNames[month],
        MMM = MMMM.substr(0, 3),
        yyyy = year + "",
        yy = yyyy.substr(2, 2)
    ;
    // checks to see if month name will be used
    patternStr = patternStr
      .replace('hh', hh).replace('h', h)
      .replace('HH', HH).replace('H', hour)
      .replace('mm', mm).replace('m', minute)
      .replace('ss', ss).replace('s', second)
      .replace('S', miliseconds)
      .replace('dd', dd).replace('d', day)
      
      .replace('EEEE', EEEE).replace('EEE', EEE)
      .replace('yyyy', yyyy)
      .replace('yy', yy)
      .replace('aaa', aaa);
    if (patternStr.indexOf('MMM') > -1) {
        patternStr = patternStr
          .replace('MMMM', MMMM)
          .replace('MMM', MMM);
    }
    else {
        patternStr = patternStr
          .replace('MM', MM)
          .replace('M', M);
    }
    return patternStr;
}
function twoDigitPad(num) {
    return num < 10 ? "0" + num : num;
}
console.log(formatDate(new Date()));
console.log(formatDate(new Date(), 'dd-MMM-yyyy')); //OP's request
console.log(formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss.S aaa'));
console.log(formatDate(new Date(), 'EEE, MMM d, yyyy HH:mm'));
console.log(formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss.S'));
console.log(formatDate(new Date(), 'M/dd/yyyy h:mmaaa'));

Cảm ơn bạn @Gerry đã đưa Luxon lên.


1
Nhân tiện, SimpleDateFormatlớp học rắc rối đã được lớp thay thế từ nhiều năm trước java.time.format.DateTimeFormatter.
Basil Bourque

1
@BasilBourque, lưu ý. Cả hai đều sử dụng các mẫu giống nhau. Tôi đã tham gia một dự án tiền Java8 được 5 năm vì vậy tôi chưa bao giờ tiếp xúc với những thứ mới hơn. Cảm ơn!
lewdev

Xem dự án ThreeTen-Backport cho Java 6 & 7, để có hầu hết các chức năng java.time với API gần như giống hệt nhau.
Basil Bourque

@BasilBourque cảm ơn bạn đã tham khảo, nhưng tôi không làm việc với dự án đó nữa nhưng tôi chắc chắn sẽ ghi nhớ điều này khi nó xuất hiện.
lewdev

2
Khoảnh khắc đã lỗi thời, hãy sử dụng luxon
Gerry

19

Đây là một số mã tôi vừa viết để xử lý định dạng ngày cho một dự án tôi đang làm. Nó bắt chước chức năng định dạng ngày của PHP để phù hợp với nhu cầu của tôi. Hãy sử dụng nó, nó chỉ mở rộng đối tượng Date () đã tồn tại. Đây có thể không phải là giải pháp tao nhã nhất nhưng nó hoạt động cho nhu cầu của tôi.

var d = new Date(); 
d_string = d.format("m/d/Y h:i:s");

/**************************************
 * Date class extension
 * 
 */
    // Provide month names
    Date.prototype.getMonthName = function(){
        var month_names = [
                            'January',
                            'February',
                            'March',
                            'April',
                            'May',
                            'June',
                            'July',
                            'August',
                            'September',
                            'October',
                            'November',
                            'December'
                        ];

        return month_names[this.getMonth()];
    }

    // Provide month abbreviation
    Date.prototype.getMonthAbbr = function(){
        var month_abbrs = [
                            'Jan',
                            'Feb',
                            'Mar',
                            'Apr',
                            'May',
                            'Jun',
                            'Jul',
                            'Aug',
                            'Sep',
                            'Oct',
                            'Nov',
                            'Dec'
                        ];

        return month_abbrs[this.getMonth()];
    }

    // Provide full day of week name
    Date.prototype.getDayFull = function(){
        var days_full = [
                            'Sunday',
                            'Monday',
                            'Tuesday',
                            'Wednesday',
                            'Thursday',
                            'Friday',
                            'Saturday'
                        ];
        return days_full[this.getDay()];
    };

    // Provide full day of week name
    Date.prototype.getDayAbbr = function(){
        var days_abbr = [
                            'Sun',
                            'Mon',
                            'Tue',
                            'Wed',
                            'Thur',
                            'Fri',
                            'Sat'
                        ];
        return days_abbr[this.getDay()];
    };

    // Provide the day of year 1-365
    Date.prototype.getDayOfYear = function() {
        var onejan = new Date(this.getFullYear(),0,1);
        return Math.ceil((this - onejan) / 86400000);
    };

    // Provide the day suffix (st,nd,rd,th)
    Date.prototype.getDaySuffix = function() {
        var d = this.getDate();
        var sfx = ["th","st","nd","rd"];
        var val = d%100;

        return (sfx[(val-20)%10] || sfx[val] || sfx[0]);
    };

    // Provide Week of Year
    Date.prototype.getWeekOfYear = function() {
        var onejan = new Date(this.getFullYear(),0,1);
        return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
    } 

    // Provide if it is a leap year or not
    Date.prototype.isLeapYear = function(){
        var yr = this.getFullYear();

        if ((parseInt(yr)%4) == 0){
            if (parseInt(yr)%100 == 0){
                if (parseInt(yr)%400 != 0){
                    return false;
                }
                if (parseInt(yr)%400 == 0){
                    return true;
                }
            }
            if (parseInt(yr)%100 != 0){
                return true;
            }
        }
        if ((parseInt(yr)%4) != 0){
            return false;
        } 
    };

    // Provide Number of Days in a given month
    Date.prototype.getMonthDayCount = function() {
        var month_day_counts = [
                                    31,
                                    this.isLeapYear() ? 29 : 28,
                                    31,
                                    30,
                                    31,
                                    30,
                                    31,
                                    31,
                                    30,
                                    31,
                                    30,
                                    31
                                ];

        return month_day_counts[this.getMonth()];
    } 

    // format provided date into this.format format
    Date.prototype.format = function(dateFormat){
        // break apart format string into array of characters
        dateFormat = dateFormat.split("");

        var date = this.getDate(),
            month = this.getMonth(),
            hours = this.getHours(),
            minutes = this.getMinutes(),
            seconds = this.getSeconds();
        // get all date properties ( based on PHP date object functionality )
        var date_props = {
            d: date < 10 ? '0'+date : date,
            D: this.getDayAbbr(),
            j: this.getDate(),
            l: this.getDayFull(),
            S: this.getDaySuffix(),
            w: this.getDay(),
            z: this.getDayOfYear(),
            W: this.getWeekOfYear(),
            F: this.getMonthName(),
            m: month < 10 ? '0'+(month+1) : month+1,
            M: this.getMonthAbbr(),
            n: month+1,
            t: this.getMonthDayCount(),
            L: this.isLeapYear() ? '1' : '0',
            Y: this.getFullYear(),
            y: this.getFullYear()+''.substring(2,4),
            a: hours > 12 ? 'pm' : 'am',
            A: hours > 12 ? 'PM' : 'AM',
            g: hours % 12 > 0 ? hours % 12 : 12,
            G: hours > 0 ? hours : "12",
            h: hours % 12 > 0 ? hours % 12 : 12,
            H: hours,
            i: minutes < 10 ? '0' + minutes : minutes,
            s: seconds < 10 ? '0' + seconds : seconds           
        };

        // loop through format array of characters and add matching data else add the format character (:,/, etc.)
        var date_string = "";
        for(var i=0;i<dateFormat.length;i++){
            var f = dateFormat[i];
            if(f.match(/[a-zA-Z]/g)){
                date_string += date_props[f] ? date_props[f] : '';
            } else {
                date_string += f;
            }
        }

        return date_string;
    };
/*
 *
 * END - Date class extension
 * 
 ************************************/

18

Một giải pháp JavaScript mà không sử dụng bất kỳ thư viện bên ngoài:

var now = new Date()
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
var formattedDate = now.getDate() + "-" + months[now.getMonth()] + "-" + now.getFullYear()
alert(formattedDate)



15

Chúng tôi có rất nhiều giải pháp cho việc này, nhưng tôi nghĩ rằng giải pháp tốt nhất trong số đó là Moment.js. Vì vậy, cá nhân tôi đề nghị sử dụng Moment.js cho các hoạt động ngày và thời gian.

console.log(moment().format('DD-MMM-YYYY'));
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>


tại sao bạn bao gồm jquery?
Ced

1
Ohh xin lỗi nó không yêu cầu. Cảm ơn @Ced
Vijay Maheriya

Làm thế nào để cung cấp ngày tôi phải đến khoảnh khắc? Tôi nghĩ rằng nó luôn luôn mất thời gian hiện tại.
Dave Ranjan

1
@DaveRanjan tôi nghĩ bạn cần chuyển đổi ngày tùy chỉnh của mình. Vì vậy, sử dụng cái này: console.log (khoảnh khắc ('2016-08-10'). Định dạng ('DD-MMM-YYYY'));
Vijay Maheriya

Vâng, tìm ra nó sau. Cảm ơn :)
Dave Ranjan

15

Một cách hữu ích và linh hoạt để định dạng DateTimes trong JavaScript là Intl.DateTimeFormat:

var date = new Date();
var options = { year: 'numeric', month: 'short', day: '2-digit'};
var _resultDate = new Intl.DateTimeFormat('en-GB', options).format(date);
// The _resultDate is: "12 Oct 2017"
// Replace all spaces with - and then log it.
console.log(_resultDate.replace(/ /g,'-'));

Kết quả là: "12-Oct-2017"

Các định dạng ngày và giờ có thể được tùy chỉnh bằng cách sử dụng đối số tùy chọn.

Đối Intl.DateTimeFormattượng là một hàm tạo cho các đối tượng cho phép định dạng ngày và giờ nhạy cảm với ngôn ngữ.

Cú pháp

new Intl.DateTimeFormat([locales[, options]])
Intl.DateTimeFormat.call(this[, locales[, options]])

Thông số

địa phương

Không bắt buộc. Một chuỗi có thẻ ngôn ngữ BCP 47 hoặc một chuỗi các chuỗi đó. Để biết hình thức chung và giải thích đối số địa phương, xem trang Intl. Các khóa mở rộng Unicode sau đây được cho phép:

nu
Numbering system. Possible values include: "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt".
ca
Calendar. Possible values include: "buddhist", "chinese", "coptic", "ethioaa", "ethiopic", "gregory", "hebrew", "indian", "islamic", "islamicc", "iso8601", "japanese", "persian", "roc".

Tùy chọn

Không bắt buộc. Một đối tượng có một số hoặc tất cả các thuộc tính sau:

localeMatcher

Các thuật toán phù hợp miền địa phương để sử dụng. Các giá trị có thể là "lookup""best fit"; mặc định là"best fit" . Để biết thông tin về tùy chọn này, xem trang Intl.

Múi giờ

Các múi giờ để sử dụng. Việc thực hiện giá trị duy nhất phải công nhận là "UTC"; mặc định là múi giờ mặc định của thời gian chạy. Triển khai cũng có thể nhận ra những cái tên múi giờ của cơ sở dữ liệu múi giờ IANA, chẳng hạn như "Asia/Shanghai", "Asia/Kolkata","America/New_York" .

giờ12

Có nên sử dụng thời gian 12 giờ (trái ngược với thời gian 24 giờ). Các giá trị có thể là truefalse ; mặc định là phụ thuộc miền địa phương.

formatMatcher

Các thuật toán phù hợp định dạng để sử dụng. Các giá trị có thể là "basic""best fit"; mặc định là"best fit" . Xem các đoạn sau để biết thông tin về việc sử dụng tài sản này.

Các thuộc tính sau mô tả các thành phần thời gian ngày để sử dụng trong đầu ra được định dạng và các biểu diễn mong muốn của chúng. Việc triển khai được yêu cầu để hỗ trợ ít nhất các tập hợp con sau:

weekday, year, month, day, hour, minute, second
weekday, year, month, day
year, month, day
year, month
month, day
hour, minute, second
hour, minute

Việc triển khai có thể hỗ trợ các tập hợp con khác và các yêu cầu sẽ được đàm phán với tất cả các kết hợp biểu diễn tập hợp con có sẵn để tìm ra kết quả phù hợp nhất. Hai thuật toán có sẵn cho cuộc đàm phán này và được chọn bởi thuộc tính formatMatcher: Một chỉ định đầy đủ"basic" Thuật toán và thuật toán "phù hợp nhất" phụ thuộc thực hiện.

các ngày trong tuần

Các đại diện của các ngày trong tuần. Giá trị có thể là "narrow", "short", "long".

kỷ nguyên

Đại diện của thời đại. Giá trị có thể là "narrow", "short","long" .

năm

Các đại diện của năm. Các giá trị có thể là "numeric","2-digit" .

tháng

Các đại diện của tháng. Giá trị có thể là "numeric", "2-digit", "narrow", "short","long" .

ngày

Các đại diện trong ngày. Các giá trị có thể là "numeric","2-digit" .

giờ

Các đại diện của giờ. Giá trị có thể là "numeric", "2-digit".

phút

Các đại diện của phút. Giá trị có thể là "numeric", "2-digit".

thứ hai

Các đại diện của thứ hai. Giá trị có thể là "numeric", "2-digit".

timeZoneName

Các đại diện của tên múi giờ. Giá trị có thể là "short", "long". Giá trị mặc định cho mỗi thuộc tính thành phần thời gian không được xác định, nhưng nếu tất cả các thuộc tính thành phần không được xác định, thì năm, tháng và ngày được giả sử là"numeric" .

Kiểm tra trực tuyến

Thêm chi tiết


15

Điều này có thể giúp với vấn đề:

var d = new Date();

var options = {   
    day: 'numeric',
    month: 'long', 
    year: 'numeric'
};

console.log(d.toLocaleDateString('en-ZA', options));

Ngày để định vị định dạng


2
hoặc d.toLocaleDateString('en-US', options);nếu bạn đang ở Hoa Kỳ.
Giám mục

Đây là giải pháp của tôi. Cảm ơn bạn.
Steven Rogers

13

Đây là cách tôi triển khai cho các plugin npm của mình

var monthNames = [
  "January", "February", "March",
  "April", "May", "June", "July",
  "August", "September", "October",
  "November", "December"
];

var Days = [
  "Sunday", "Monday", "Tuesday", "Wednesday",
  "Thursday", "Friday", "Saturday"
];

var formatDate = function(dt,format){
  format = format.replace('ss', pad(dt.getSeconds(),2));
  format = format.replace('s', dt.getSeconds());
  format = format.replace('dd', pad(dt.getDate(),2));
  format = format.replace('d', dt.getDate());
  format = format.replace('mm', pad(dt.getMinutes(),2));
  format = format.replace('m', dt.getMinutes());
  format = format.replace('MMMM', monthNames[dt.getMonth()]);
  format = format.replace('MMM', monthNames[dt.getMonth()].substring(0,3));
  format = format.replace('MM', pad(dt.getMonth()+1,2));
  format = format.replace(/M(?![ao])/, dt.getMonth()+1);
  format = format.replace('DD', Days[dt.getDay()]);
  format = format.replace(/D(?!e)/, Days[dt.getDay()].substring(0,3));
  format = format.replace('yyyy', dt.getFullYear());
  format = format.replace('YYYY', dt.getFullYear());
  format = format.replace('yy', (dt.getFullYear()+"").substring(2));
  format = format.replace('YY', (dt.getFullYear()+"").substring(2));
  format = format.replace('HH', pad(dt.getHours(),2));
  format = format.replace('H', dt.getHours());
  return format;
}

pad = function(n, width, z) {
  z = z || '0';
  n = n + '';
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}

Bạn đang đề cập đến gói nào?
lbrahim

Điều này có một lỗi: Tên tháng được thay thế đầu tiên, sau đó tên của tháng cũng sẽ được thay thế. Ví dụ Marchsẽ trở thành 3archvới mã này.
ntaso

1
Thay đổi dòng cho 'M'đến format = format.replace("M(?!M)", (dt.getMonth()+1).toString());và đặt nó ở trên phù hợp với'MMMM'
ntaso

9
var today = new Date();
var formattedToday = today.toLocaleDateString() + ' ' + today.toLocaleTimeString();

8

Sugar.js có các tiện ích mở rộng tuyệt vời cho đối tượng Date, bao gồm Date.format phương thức .

Ví dụ từ tài liệu:

Date.create().format('{Weekday} {Month} {dd}, {yyyy}');

Date.create().format('{12hr}:{mm}{tt}')

8

Đối với bất kỳ ai đang tìm kiếm một giải pháp ES6 thực sự đơn giản để sao chép, dán và chấp nhận:

const dateToString = d => `${d.getFullYear()}-${('00' + (d.getMonth() + 1)).slice(-2)}-${('00' + d.getDate()).slice(-2)}` 

// how to use:
const myDate = new Date(Date.parse('04 Dec 1995 00:12:00 GMT'))
console.log(dateToString(myDate)) // 1995-12-04


8

Kể từ năm 2019, có vẻ như bạn có thể nhận được toLocaleDateString để chỉ trả lại một số phần nhất định và sau đó bạn có thể tham gia chúng theo ý muốn:

var date = new Date();

console.log(date.toLocaleDateString("en-US", { day: 'numeric' }) 
            + "-"+ date.toLocaleDateString("en-US", { month: 'short' })
            + "-" + date.toLocaleDateString("en-US", { year: 'numeric' }) );

> 16-Nov-2019

console.log(date.toLocaleDateString("en-US", { month: 'long' }) 
            + " " + date.toLocaleDateString("en-US", { day: 'numeric' }) 
            + ", " + date.toLocaleDateString("en-US", { year: 'numeric' }) );

> November 16, 2019

8

Bạn nên xem DayJs Đây là phiên bản làm lại của khoảnh khắc nhưng kiến ​​trúc mô đun được định hướng rất nhẹ.

Nhanh chóng thay thế 2kB cho Moment.js với cùng API hiện đại

Day.js là một thư viện JavaScript tối giản để phân tích, xác thực, thao tác và hiển thị ngày và giờ cho các trình duyệt hiện đại với API tương thích với Moment.js. Nếu bạn sử dụng Moment.js, bạn đã biết cách sử dụng Day.js.

var date = Date.now();
const formatedDate = dayjs(date).format("YYYY-MM-DD")
console.log(formatedDate);
<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.8.16/dayjs.min.js" crossorigin="anonymous"></script>


7

Để có được "ngày 10 tháng 8 năm 2010", hãy thử:

var date = new Date('2010-08-10 00:00:00');
date = date.toLocaleDateString(undefined, {day:'2-digit'}) + '-' + date.toLocaleDateString(undefined, {month:'short'}) + '-' + date.toLocaleDateString(undefined, {year:'numeric'})

Để được hỗ trợ trình duyệt, xem toLocaleDateString .


Tôi không cần "-", đây là phiên bản ngắn hơn với thời gian, ngày và múi giờ! ngày = ngày mới (); date.toLocaleDateString (không xác định, {day: '2 chữ số', tháng: 'ngắn', năm: 'số', giờ: 'số', phút: 'số', timeZoneName: 'short'}); :)
varun
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.