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 .


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/


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

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').


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


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/ .


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/


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


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);

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>


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]

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.