¿Cómo puedo eliminar el tiempo de la fecha con Moment.js?


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

Muestra: "28 februari 2013 09:24"

Pero me gustaría eliminar el tiempo al final. ¿Cómo puedo hacer eso?

Estoy usando Moment.js .


Use el método Split para separar las cadenas
AmGates

Respuestas:


605

Lamento ir tan tarde, pero si desea eliminar la parte de tiempo de un formato en moment()lugar de hacerlo, entonces el código es:

.startOf('day')

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


90
Tenga cuidado con esto si va entre zonas horarias (o si no está prestando atención a las zonas horarias). Tuve un problema en el que mi fecha UTC se convertía a la hora local, luego se aplicaba startOf('day'), que era el comienzo del día anterior . Solucionado conmoment(moment.utc('2013-10-29T00:00:00+00:00').startOf('day').format('LL')).startOf('day').toDate()
colllin el

26
También tenga cuidado de que esta función realmente mute el objeto original
Dirk Boer

66
.startOf('day')no elimina la parte de tiempo per se, solo establece la hora en 00:00:00. Entonces, sí, como comentó 'collin', debes tener cuidado al guardar la fecha. Se está utilizando una alternativa mejor format('LL'), como se ha respondido en este hilo.
Sudarshan_SMD

44
Para evitar mutar el objeto original, use someMoment.clone().startOf('day')o moment(someMoment).startOf('day').
Pang

Tenga cuidado, startOf ('día') restablecerá todo y no solo establecerá la hora en 00:00:00. moment().utc().add(1,'d').startOf('day')restablecerá el objeto a hoy.
Tristan

51

Utilizar format('LL')

Dependiendo de lo que intente hacer con él, format('LL')podría ser el truco. Produce algo como esto:

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

26

La forma correcta sería especificar la entrada según su requisito, lo que le dará más flexibilidad.

La presente definición incluye lo siguiente

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'

Puede usar cualquiera de estos o cambiar la entrada que se pasa a moment (). Format (). Por ejemplo, para su caso puede pasar moment.utc(dateTime).format('MMMM D, YYYY').


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

6

También puede usar este formato:

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


6

Con las versiones más recientes de moment.js también puedes hacer esto:

var dateTime = moment();

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

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


¿No sería en date: dateTime.date()lugar de day: dateTime.date()?
philfreo

1
'día y fecha clave significan día del mes'. de los documentos. dayfunciona pre versión 2.8.4.
oldwizard

6

Bien, sé que llego tarde a la fiesta. Como 6 años de retraso, pero esto era algo que necesitaba averiguar y formatearlo AAAA-MM-DD.

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

También se puede pasar de un parámetro como, 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

Cada vez que uso la moment.jsbiblioteca, especifico el formato deseado de esta manera:

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

o

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

... etc Espero que tengas la idea

Dentro de la función de formato, pones el formato deseado. El ejemplo anterior eliminará todos los elementos no deseados de la fecha, como minutos y segundos.


Esta no es una buena idea si alguna vez desea mostrar su contenido en diferentes configuraciones regionales. Si desea mostrar las fechas en el formato correcto para la configuración regional del usuario, es necesario utilizar uno de los formatos de fecha preestablecida ( L, LL, etc.)
AJ Richardson

¿Por qué configuras MMM tres veces?
Menai Ala Eddine - Aladdin

MMM le dará las 3 primeras letras del mes. 'Apr' MMMM le dará un nombre de mes completo
Adrian Grzywaczewski

4

Para las personas como yo queremos el formato de fecha larga ( LLLL) pero sin la hora del día, hay un problema de GitHub para eso: https://github.com/moment/moment/issues/2505 . Por ahora, hay una solución alternativa:

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
Finalmente una respuesta sensata. Tome mi voto a favor señor! El problema aún no se ha abordado, parece.
oyalhi

3

Puedes usar este constructor

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>


Agregue alguna descripción de mineral aquí
Mathews Sunny

¡Esto es interesante! Está creando un momento y una hora, minutos y segundos primordiales, pero aún mantiene la fecha subyacente. Interesante porque habría adivinado que moment({h:0, m:0, s:0, ms:0})me habría dado el 1 de enero de 1970 en lugar de hoy.
Simon_Weaver

También parece que moment({ h: 0 })hace lo mismo.
Simon_Weaver

1
Los documentos dicenOmitted units default to 0 or the current date, month, and year.
Simon_Weaver

2

Prueba esto:

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

Cuidado con este método, ya que 1993-06-07T22:00:00.000Zdará como resultado que 1993-06-07mientras que es el inicio de la jornada de1993-06-08
Tom
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.