Jak mogę usunąć czas z daty w Moment.js?

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

Wyświetla: „28 lutego 2013 09:24”

Ale chciałbym usunąć czas na końcu. Jak mogę to zrobić?

Używam Moment.js .

Obsivus
źródło
Użyj metody Split, aby oddzielić ciągi znaków
AmGates

Odpowiedzi:

605

Przepraszam, że wskoczyłem tak późno, ale jeśli chcesz usunąć część czasu moment()zamiast formatować , kod jest następujący:

.startOf('day')

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

Graham Charles
źródło
90
Bądź ostrożny, jeśli przechodzisz między strefami czasowymi (lub jeśli nie zwracasz uwagi na strefy czasowe). Miałem problem polegający na tym, że moja data UTC była konwertowana na czas lokalny, a następnie aplikowałam startOf('day'), co było początkiem poprzedniego dnia. Naprawiono za pomocąmoment(moment.utc('2013-10-29T00:00:00+00:00').startOf('day').format('LL')).startOf('day').toDate()
colllin
26
Uważaj również, aby ta funkcja faktycznie mutowała oryginalny obiekt
Dirk Boer
6
.startOf('day')nie usuwa części czasu jako takiej, po prostu ustawia czas na 00:00:00. Tak więc, jak skomentował „collin”, musisz zachować ostrożność podczas zapisywania daty. Jest lepsza alternatywa format('LL'), jak już odpowiedziano w tym wątku.
Sudarshan_SMD
4
Aby uniknąć mutacji oryginalnego obiektu, użyj someMoment.clone().startOf('day')lub moment(someMoment).startOf('day').
Pang
Uważaj, startOf („dzień”) zresetuje wszystko, a nie tylko ustawi czas na 00:00:00. moment().utc().add(1,'d').startOf('day')zresetuje obiekt do dzisiaj.
Tristan
50

Posługiwać się format('LL')

W zależności od tego, co próbujesz z tym zrobić, format('LL')może załatwić sprawę . Wytwarza coś takiego:

Moment().format('LL'); // => April 29, 2016
Joshua Pinter
źródło
26

Prawidłowym sposobem byłoby określenie danych wejściowych zgodnie z wymaganiami, co zapewni większą elastyczność.

Niniejsza definicja obejmuje następujące elementy

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'

Możesz użyć dowolnego z nich lub zmienić dane wejściowe przekazane na moment (). Format (). Na przykład w sprawie możesz przekazać moment.utc(dateTime).format('MMMM D, YYYY').

Sahil Jain
źródło
9
formatCalendarDate = function (dateTime) {
    return moment.utc(dateTime).format('LL')
}
AmGates
źródło
6

Możesz także użyć tego formatu:

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

Hashmita Raut
źródło
6

W nowszych wersjach mom.js możesz również to zrobić:

var dateTime = moment();

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

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

Torben Rahbek Koch
źródło
Czy nie byłoby date: dateTime.date()zamiast day: dateTime.date()?
philfreo
1
„klucz dnia i daty oznaczają dzień miesiąca”. z dokumentów. daydziała przed wersją 2.8.4.
oldwizard
6

Okej, więc wiem, że jestem spóźniony na przyjęcie. Jak 6 lat spóźnienia, ale to było coś, co musiałem wymyślić i sformatować RRRR-MM-DD.

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

Możesz także przekazać parametr taki jak 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/

Mix Master Mike
źródło
4

Ilekroć korzystam z moment.jsbiblioteki, określam pożądany format w następujący sposób:

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

lub

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

... itd. Mam nadzieję, że masz pomysł

Wewnątrz funkcji formatowania umieścisz żądany format. Powyższy przykład usunie wszystkie niechciane elementy z daty, takie jak minuty i sekundy

Adrian Grzywaczewski
źródło
To nie jest dobry pomysł, jeśli kiedykolwiek chcesz wyświetlać swoje treści w różnych lokalizacjach. Jeśli chcesz dat wyświetlanych w odpowiednim formacie do lokalizacji użytkownika, należy użyć jednego z formatów daty zaprogramowanego ( L, LLetc.)
AJ Richardson
Dlaczego trzy razy ustawiasz MMM?
Menai Ala Eddine - Aladdin
MMM da ci 3 pierwsze litery miesiąca. „Apr” MMMM da ci pełne imię i nazwisko
Adrian Grzywaczewski
4

Dla osób takich jak ja chce formatu długiej daty ( LLLL), ale bez pory dnia istnieje problem GitHub: https://github.com/moment/moment/issues/2505 . Na razie istnieje obejście:

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
źródło
1
Wreszcie rozsądna odpowiedź. Weź głos, proszę pana! Wygląda na to, że problem nie został jeszcze rozwiązany.
oyalhi
3

Możesz użyć tego konstruktora

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
źródło
Dodaj tutaj opis rudy
Mathews Sunny,
To jest interesujące! Tworzy moment i nadrzędną godzinę, minuty i sekundy, ale wciąż dotrzymuje daty. Interesujące, ponieważ zgadłbym, że moment({h:0, m:0, s:0, ms:0})dałoby mi to 1 stycznia 1970 r., A nie dziś.
Simon_Weaver
Wygląda również na moment({ h: 0 })to samo.
Simon_Weaver
1
Dokumenty mówiąOmitted units default to 0 or the current date, month, and year.
Simon_Weaver
2

Spróbuj tego:

moment.format().split("T")[0]
Keith Blanchard
źródło
Uważaj za pomocą tej metody, ponieważ 1993-06-07T22:00:00.000Zspowoduje 1993-06-07to, że jest to początek dnia1993-06-08
Tom