Làm cách nào tôi có thể xóa thời gian từ ngày với Moment.js?


268
formatCalendarDate = function (dateTime) {
    return moment.utc(dateTime).format('LLL');
};

Nó hiển thị: "28 februari 2013 09:24"

Nhưng tôi muốn loại bỏ thời gian ở cuối. Làm thế nào tôi có thể làm điều đó?

Tôi đang sử dụng Moment.js .


Sử dụng phương pháp Chia để tách các chuỗi
AmGates

Câu trả lời:


605

Xin lỗi để nhảy vào quá muộn, nhưng nếu bạn muốn loại bỏ phần thời gian của một moment()thay vì định dạng nó, thì mã là:

.startOf('day')

Tham chiếu: http://momentjs.com/docs/#/manipulation/start-of/


90
Hãy cẩn thận với điều này nếu bạn đi giữa các múi giờ (hoặc nếu bạn không chú ý đến múi giờ). Tôi gặp vấn đề trong đó ngày UTC của tôi đã được chuyển đổi thành giờ địa phương, sau đó áp dụng startOf('day'), đó là ngày bắt đầu của ngày hôm trước . Đã sửa vớimoment(moment.utc('2013-10-29T00:00:00+00:00').startOf('day').format('LL')).startOf('day').toDate()
colllin

26
Ngoài ra, hãy cẩn thận rằng chức năng này thực sự làm thay đổi đối tượng ban đầu
Dirk Boer

6
.startOf('day')không loại bỏ phần thời gian mỗi se, nó chỉ đặt thời gian là 00:00:00. Vì vậy, vâng, như nhận xét của 'collin', bạn phải cẩn thận khi lưu ngày. Thay thế tốt hơn là sử dụng format('LL'), như đã được trả lời trong chủ đề này.
Sudarshan_SMD

4
Để tránh làm biến đổi đối tượng ban đầu, hãy sử dụng someMoment.clone().startOf('day')hoặc moment(someMoment).startOf('day').
Pang

Hãy cẩn thận, startOf ('ngày') sẽ đặt lại mọi thứ và không chỉ đặt thời gian thành 00:00:00. moment().utc().add(1,'d').startOf('day')sẽ thiết lập lại đối tượng cho đến ngày hôm nay.
Tristan

50

Sử dụng format('LL')

Tùy thuộc vào những gì bạn đang cố gắng làm với nó, format('LL')có thể thực hiện các mẹo. Nó tạo ra một cái gì đó như thế này:

Moment().format('LL'); // => April 29, 2016

26

Cách chính xác sẽ là chỉ định đầu vào theo yêu cầu của bạn sẽ giúp bạn linh hoạt hơn.

Định nghĩa hiện tại bao gồm những điều sau đây

LTS : 'h:mm:ss A', LT : 'h:mm A', L : 'MM/DD/YYYY', LL : 'MMMM D, YYYY', LLL : 'MMMM D, YYYY h:mm A', LLLL : 'dddd, MMMM D, YYYY h:mm A'

Bạn có thể sử dụng bất kỳ trong số này hoặc thay đổi đầu vào được chuyển thành khoảnh khắc (). Format (). Ví dụ, đối với trường hợp của bạn, bạn có thể vượt qua moment.utc(dateTime).format('MMMM D, YYYY').


9
formatCalendarDate = function (dateTime) {
    return moment.utc(dateTime).format('LL')
}

6

Bạn cũng có thể sử dụng định dạng này:

moment().format('ddd, ll'); // Wed, Jan 4, 2017


6

Với các phiên bản mới hơn của Moment.js, bạn cũng có thể làm điều này:

var dateTime = moment();

var dateValue = moment({
    year: dateTime.year(),
    month: dateTime.month(),
    day: dateTime.date()
});

Xem: http://momentjs.com/docs/#/parsing/object/ .


Nó sẽ không date: dateTime.date() thay thế day: dateTime.date()?
philfreo

1
'khóa ngày và ngày đều có nghĩa là ngày trong tháng.' từ các tài liệu. dayhoạt động phiên bản trước 2.8.4.
lão già

6

Được rồi, vì vậy tôi biết tôi đến bữa tiệc muộn. Giống như 6 năm muộn nhưng đây là điều tôi cần để tìm ra và định dạng nó YYYY-MM-DD.

moment().format(moment.HTML5_FMT.DATE); // 2019-11-08

Bạn cũng có thể vượt qua trong một tham số như , 2019-11-08T17:44:56.144.

moment("2019-11-08T17:44:56.144").format(moment.HTML5_FMT.DATE); // 2019-11-08

https://momentjs.com/docs/#/parsing/special-formats/


4

Bất cứ khi nào tôi sử dụng moment.jsthư viện, tôi chỉ định định dạng mong muốn theo cách này:

moment(<your Date goes here>).format("DD-MMM-YYYY")

hoặc là

moment(<your Date goes here>).format("DD/MMM/YYYY")

... vv Tôi hy vọng bạn có được ý tưởng

Bên trong chức năng định dạng, bạn đặt định dạng mong muốn. Ví dụ trên sẽ loại bỏ tất cả các yếu tố không mong muốn từ ngày, chẳng hạn như phút và giây


Đây không phải là một ý tưởng tốt nếu bạn muốn hiển thị nội dung của mình ở các địa phương khác nhau. Nếu bạn muốn hiển thị ngày trong các định dạng chính xác cho miền địa phương của người sử dụng, bạn cần phải sử dụng một trong các định dạng ngày cài sẵn ( L, LL, vv)
AJ Richardson

Tại sao bạn đặt MMM ba lần.
Menai Ala Eddine - Aladdin

MMM sẽ cung cấp cho bạn 3 chữ cái đầu tiên của tháng. 'MMMM' tháng Tư sẽ cung cấp cho bạn một tên đầy đủ tháng
Adrian Grzywaczewski

4

Đối với những người như tôi muốn định dạng ngày dài ( LLLL) nhưng không có thời gian trong ngày, có một vấn đề GitHub cho điều đó: https://github.com/moment/moment/issues/2505 . Hiện tại, có một cách giải quyết:

var localeData = moment.localeData( moment.locale() ),
    llll = localeData.longDateFormat( 'llll' ),
    lll = localeData.longDateFormat( 'lll' ),
    ll = localeData.longDateFormat( 'll' ),
    longDateFormat = llll.replace( lll.replace( ll, '' ), '' );
var formattedDate = myMoment.format(longDateFormat);

1
Cuối cùng là một câu trả lời hợp lý. Hãy upvote của tôi thưa ông! Vấn đề chưa được giải quyết nhưng có vẻ như.
oyaltyhi

3

Bạn có thể sử dụng hàm tạo này

moment({h:0, m:0, s:0, ms:0})

http://momentjs.com/docs/#/parsing/object/

console.log( moment().format('YYYY-MM-DD HH:mm:ss') )

console.log( moment({h:0, m:0, s:0, ms:0}).format('YYYY-MM-DD HH:mm:ss') )
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>


Thêm một số mô tả quặng ở đây
Mathews Sunny

Hay đấy! Nó tạo ra một khoảnh khắc và ghi đè giờ, phút và giây nhưng vẫn giữ ngày dưới quyền. Thú vị bởi vì tôi đã đoán rằng moment({h:0, m:0, s:0, ms:0})sẽ cho tôi ngày 1 tháng 1 năm 1970 chứ không phải hôm nay.
Simon_Weaver

Cũng có vẻ như moment({ h: 0 })làm như vậy.
Simon_Weaver

1
Các tài liệu nóiOmitted units default to 0 or the current date, month, and year.
Simon_Weaver

2

Thử cái này:

moment.format().split("T")[0]

Coi chừng với phương pháp này, 1993-06-07T22:00:00.000Zsẽ có kết quả như 1993-06-07trong khi đó là ngày bắt đầu của ngày1993-06-08
Tom
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.