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 .

Obsivus
sumber
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/

Graham Charles
sumber
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
Joshua Pinter
sumber
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').

Sahil Jain
sumber
9
formatCalendarDate = function (dateTime) {
    return moment.utc(dateTime).format('LL')
}
AmGates
sumber
6

Anda juga dapat menggunakan format ini:

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

Hashmita Raut
sumber
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/ .

Torben Rahbek Koch
sumber
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/

Campur Tuan Mike
sumber
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

Adrian Grzywaczewski
sumber
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);
AJ Richardson
sumber
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>

acucchieri
sumber
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]
Keith Blanchard
sumber
Waspadalah dengan metode ini, seperti yang 1993-06-07T22:00:00.000Zakan terjadi ketika 1993-06-07itu adalah awal dari hari1993-06-08
Tom