Wie kann ich mit Moment.js die Uhrzeit vom Datum entfernen?

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

Es zeigt an: "28 februari 2013 09:24"

Aber ich möchte die Zeit am Ende entfernen. Wie kann ich das machen?

Ich benutze Moment.js .

Obsivus
quelle
Verwenden Sie die Split-Methode, um die Zeichenfolgen zu trennen
AmGates

Antworten:

605

Es tut uns leid, dass Sie so spät einspringen müssen, aber wenn Sie den Zeitteil von a entfernen möchten, moment()anstatt ihn zu formatieren , lautet der Code:

.startOf('day')

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

Graham Charles
quelle
90
Seien Sie vorsichtig damit, wenn Sie zwischen Zeitzonen wechseln (oder wenn Sie Zeitzonen nicht beachten). Ich hatte ein Problem, bei dem mein UTC-Datum in Ortszeit umgerechnet wurde und sich dann bewarb startOf('day'). Dies war dann der Beginn des vorherigen Tages. moment(moment.utc('2013-10-29T00:00:00+00:00').startOf('day').format('LL')).startOf('day').toDate()
Behoben
26
Achten Sie auch darauf, dass diese Funktion tatsächlich das ursprüngliche Objekt mutiert
Dirk Boer
6
.startOf('day')Entfernt den Zeitteil nicht per se, sondern setzt die Zeit nur auf 00:00:00. Also, ja, wie von 'collin' kommentiert, müssen Sie beim Speichern des Datums vorsichtig sein. Bessere Alternative ist die Verwendung format('LL'), wie in diesem Thread beantwortet wurde.
Sudarshan_SMD
4
Verwenden Sie someMoment.clone().startOf('day')oder, um eine Mutation des Originalobjekts zu vermeiden moment(someMoment).startOf('day').
Pang
Seien Sie vorsichtig, startOf ('Tag') setzt alles zurück und stellt nicht nur die Zeit auf 00:00:00 ein. moment().utc().add(1,'d').startOf('day')wird das Objekt auf heute zurücksetzen.
Tristan
49

Verwenden format('LL')

Je nachdem, was Sie damit machen wollen, format('LL')könnte dies der Trick sein. Es produziert so etwas:

Moment().format('LL'); // => April 29, 2016
Joshua Pinter
quelle
26

Der richtige Weg wäre, die Eingabe gemäß Ihren Anforderungen anzugeben, um mehr Flexibilität zu erhalten.

Die vorliegende Definition umfasst Folgendes

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'

Sie können eine dieser Optionen verwenden oder die Eingabe ändern, die in moment (). Format () übergeben wird. Zum Beispiel können Sie für Ihren Fall bestehen moment.utc(dateTime).format('MMMM D, YYYY').

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

Sie können auch dieses Format verwenden:

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

Hashmita Raut
quelle
6

Mit neueren Versionen von moment.js können Sie dies auch tun:

var dateTime = moment();

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

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

Torben Rahbek Koch
quelle
Wäre es nicht date: dateTime.date()stattdessen day: dateTime.date()?
Philfreo
1
"Tag und Datum bedeuten beide den Tag des Monats." aus den Dokumenten. dayfunktioniert vor Version 2.8.4.
Oldwizard
6

Okay, ich weiß, dass ich viel zu spät zur Party komme. Wie 6 Jahre zu spät, aber das war etwas, was ich herausfinden und formatieren musste JJJJ-MM-TT.

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

Sie können auch einen Parameter wie , 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/

Mischen Sie Master Mike
quelle
4

Wann immer ich die moment.jsBibliothek benutze, gebe ich das gewünschte Format folgendermaßen an:

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

oder

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

... usw. Ich hoffe du kommst auf die Idee

Innerhalb der Formatierungsfunktion geben Sie das gewünschte Format ein. Im obigen Beispiel werden alle unerwünschten Elemente ab dem Datum wie Minuten und Sekunden entfernt

Adrian Grzywaczewski
quelle
Dies ist keine gute Idee, wenn Sie Ihre Inhalte jemals an verschiedenen Orten anzeigen möchten. Wenn Sie in dem richtigen Format für den Benutzer locale Anzeigedaten mögen, müssen Sie eine der voreingestellten Datumsformate verwenden ( L, LLusw.)
AJ Richardson
Warum Sie MMM dreimal einstellen.
Menai Ala Eddine - Aladdin
MMM gibt Ihnen die 3 ersten Buchstaben des Monats. 'Apr' MMMM gibt Ihnen einen vollständigen Monatsnamen
Adrian Grzywaczewski
4

Für Leute wie mich, die das lange Datumsformat ( LLLL) wollen, aber ohne Tageszeit, gibt es dafür ein GitHub-Problem: https://github.com/moment/moment/issues/2505 . Im Moment gibt es eine Problemumgehung:

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
quelle
1
Endlich eine vernünftige Antwort. Nehmen Sie meine positive Stimme, Sir! Das Problem wurde anscheinend noch nicht behoben.
Oyalhi
3

Sie können diesen Konstruktor verwenden

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
quelle
Fügen Sie hier eine
Erzbeschreibung hinzu
Das ist interessant! Es schafft einen Moment und überschreibt Stunde, Minuten und Sekunden, behält aber immer noch das Datum des Untergebenen bei. Interessant, weil ich vermutet moment({h:0, m:0, s:0, ms:0})hätte, dass ich den 1. Januar 1970 und nicht heute erhalten hätte.
Simon_Weaver
Sieht moment({ h: 0 })auch so aus.
Simon_Weaver
1
Die Dokumente sagenOmitted units default to 0 or the current date, month, and year.
Simon_Weaver
2

Versuche dies:

moment.format().split("T")[0]
Keith Blanchard
quelle
Schauen Sie mit dieser Methode aus, als 1993-06-07T22:00:00.000ZFolge wird , wie 1993-06-07während es der Beginn des Tages der ist1993-06-08
Tom