Bagaimana saya bisa menghapus waktu dari tanggal dengan Moment.js?


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

Ini menampilkan: "28 februari 2013 09:24"

Tapi saya ingin menghapus waktu di akhir. Bagaimana saya bisa melakukan itu?

Saya menggunakan Moment.js .


Gunakan metode Split untuk memisahkan string
AmGates

Jawaban:


605

Maaf karena terlambat masuk, tetapi jika Anda ingin menghapus bagian waktu moment()daripada memformatnya , maka kodenya adalah:

.startOf('day')

Ref: http://momentjs.com/docs/#/manipulating/start-of/


90
Hati-hati dengan ini jika Anda pergi di antara zona waktu (atau jika Anda tidak memperhatikan zona waktu). Saya memiliki masalah ketika tanggal UTC saya dikonversikan ke waktu lokal, lalu mendaftar startOf('day'), yang kemudian menjadi awal hari sebelumnya . Diperbaiki denganmoment(moment.utc('2013-10-29T00:00:00+00:00').startOf('day').format('LL')).startOf('day').toDate()
colllin

26
Juga hati-hati bahwa fungsi ini benar-benar bermutasi objek asli
Dirk Boer

6
.startOf('day')tidak menghapus bagian waktu per se, itu hanya mengatur waktu ke 00:00:00. Jadi, ya, seperti yang dikomentari oleh 'collin', Anda harus berhati-hati saat menyimpan tanggal. Alternatif yang lebih baik adalah menggunakan format('LL'), seperti yang telah dijawab di utas ini.
Sudarshan_SMD

4
Untuk menghindari mutasi objek asli, gunakan someMoment.clone().startOf('day')atau moment(someMoment).startOf('day').
Pang

Hati-hati, startOf ('hari') akan mengatur ulang semuanya dan tidak hanya mengatur waktu ke 00:00:00. moment().utc().add(1,'d').startOf('day')akan mengatur ulang objek ke hari ini.
Tristan

50

Menggunakan format('LL')

Tergantung pada apa yang Anda coba lakukan dengan itu, format('LL')bisa melakukan triknya. Ini menghasilkan sesuatu seperti ini:

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

26

Cara yang benar adalah menentukan input sesuai kebutuhan Anda yang akan memberi Anda lebih banyak fleksibilitas.

Definisi saat ini meliputi yang berikut ini

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'

Anda dapat menggunakan salah satu dari ini atau mengubah input yang dilewatkan ke dalam format moment (). (). Misalnya, untuk kasus Anda, Anda dapat lulus moment.utc(dateTime).format('MMMM D, YYYY').


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

6

Anda juga dapat menggunakan format ini:

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


6

Dengan versi moment.js yang lebih baru, Anda juga dapat melakukan ini:

var dateTime = moment();

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

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


Bukankah itu date: dateTime.date()bukan day: dateTime.date()?
philfreo

1
'Kunci hari dan tanggal keduanya berarti hari dalam sebulan.' dari dokumen. daybekerja pra versi 2.8.4.
oldwizard

6

Oke, jadi saya tahu saya terlambat ke pesta. Seperti terlambat 6 tahun, tetapi ini adalah sesuatu yang saya butuhkan untuk mencari tahu dan memformatnya YYYY-MM-DD.

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

Anda juga dapat mengirimkan parameter seperti 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

Setiap kali saya menggunakan moment.jsperpustakaan saya menentukan format yang diinginkan dengan cara ini:

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

atau

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

... dll. Saya harap Anda mendapatkan ide

Di dalam fungsi format, Anda meletakkan format yang diinginkan. Contoh di atas akan menghilangkan semua elemen yang tidak diinginkan dari tanggal seperti menit dan detik


Ini bukan ide yang baik jika Anda ingin menampilkan konten Anda di tempat yang berbeda. Jika Anda ingin menampilkan tanggal dalam format yang benar untuk lokal pengguna, Anda perlu menggunakan salah satu format tanggal yang telah ditetapkan ( L, LL, dll)
AJ Richardson

Mengapa Anda mengatur MMM tiga kali.
Menai Ala Eddine - Aladdin

MMM akan memberi Anda 3 huruf pertama bulan ini. MMMM 'Apr' akan memberimu nama sebulan penuh
Adrian Grzywaczewski

4

Bagi orang-orang seperti saya menginginkan format tanggal panjang ( LLLL) tetapi tanpa waktu, ada masalah GitHub untuk itu: https://github.com/moment/moment/issues/2505 . Untuk saat ini, ada solusinya:

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
Akhirnya jawaban yang masuk akal. Terima Tuan yang terhormat saya! Tampaknya masalah ini belum diatasi.
oyalhi

3

Anda dapat menggunakan konstruktor ini

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>


Tambahkan deskripsi bijih di sini
Mathews Sunny

Ini menarik! Ini menciptakan momen dan jam utama, menit dan detik tetapi tetap menjaga tanggal bawahan. Menarik karena saya kira itu moment({h:0, m:0, s:0, ms:0})akan memberi saya 1 Januari 1970 daripada hari ini.
Simon_Weaver

Sepertinya juga moment({ h: 0 })melakukan hal yang sama.
Simon_Weaver

1
Docs mengatakanOmitted units default to 0 or the current date, month, and year.
Simon_Weaver

2

Coba ini:

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

Waspadalah dengan metode ini, seperti yang 1993-06-07T22:00:00.000Zakan terjadi ketika 1993-06-07itu adalah awal dari hari1993-06-08
Tom
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.