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

It displays: "28 februari 2013 09:24"

But I would like to remove the time at the end. How can I do that?

I'm using Moment.js.

Pang
  • 9,073
  • 146
  • 84
  • 117
Obsivus
  • 7,961
  • 13
  • 51
  • 95

15 Answers15

737

Sorry to jump in so late, but if you want to remove the time portion of a moment() rather than formatting it, then the code is:

.startOf('day')

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

Liam
  • 25,247
  • 27
  • 110
  • 174
Graham Charles
  • 8,918
  • 3
  • 24
  • 41
  • 102
    Be careful with this if you're going between timezones (or if you're not paying attention to timezones). I had an issue where my UTC date was getting converted to local time, *then* applying `startOf('day')`, which was then the start of the *previous* day. Fixed with `moment(moment.utc('2013-10-29T00:00:00+00:00').startOf('day').format('LL')).startOf('day').toDate()` – colllin Nov 06 '13 at 05:37
  • 36
    Also be careful that this function actually mutates the original object – Dirk Boer Jul 08 '15 at 16:36
  • 9
    `.startOf('day')` does not removes the time part per se, it just sets the time to 00:00:00. So, yes, as commented by 'collin', you have to be careful when saving date. Better alternative is using `format('LL')`, as have been answered in this thread. – Sudarshan_SMD Dec 13 '16 at 07:18
  • 7
    To avoid mutating the original object, use `someMoment.clone().startOf('day')` or `moment(someMoment).startOf('day')`. – Pang May 23 '17 at 08:06
  • Be careful, startOf('day') will reset everything and not just set the time to 00:00:00. `moment().utc().add(1,'d').startOf('day')` will reset the object to today. – Tristan Sep 20 '17 at 19:09
  • 2
    I also had to deal with multiple timezones but found that simply stringing utc().startOf('day') was enough: `moment("2017-10-09T00:00:00Z").isSameOrAfter(moment("2017-10-09 22:00:00+00:00").utc().startOf('day'), 'day');` true `moment("2017-10-09T00:00:00Z").isSameOrAfter(moment("2017-10-09 22:00:00+00:00").startOf('day'), 'day');` false – RubberDuckRabbit Oct 12 '17 at 17:27
  • This can be problematic with timezones, for example: `console.log(moment().tz('America/Los_Angeles').startOf('day').format());` spits out `2018-03-09T00:00:00-08:00` and `console.log(moment().startOf('day').format());` spits out `2018-03-10T00:00:00+08:00` – Jaime Cham Mar 10 '18 at 04:26
  • @Tristan That's not accurate, `startOf('day')` changes the object to the start of the day it was already pointing at. Possibly converting to utc made the day shift to yesterday and then adding 1d brought it back to today – Michael Mrozek Jun 26 '20 at 04:21
62

Use format('LL')

Depending on what you're trying to do with it, format('LL') could do the trick. It produces something like this:

Moment().format('LL'); // => April 29, 2016
Joshua Pinter
  • 41,803
  • 23
  • 230
  • 232
  • 1
    See https://momentjs.com/docs/#/parsing/string-format/ for more formatting options. – LMB Jul 25 '20 at 14:30
42

The correct way would be to specify the input as per your requirement which will give you more flexibility.

The present definition includes the following

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'

You can use any of these or change the input passed into moment().format(). For example, for your case you can pass moment.utc(dateTime).format('MMMM D, YYYY').

Sahil Jain
  • 3,259
  • 2
  • 12
  • 15
25

Okay, so I know I'm way late to the party. Like 6 years late but this was something I needed to figure out and have it formatted YYYY-MM-DD.

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

You can also pass in a parameter like, 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
  • 937
  • 12
  • 25
12

You can also use this format:

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

Hashmita Raut
  • 181
  • 1
  • 7
10
formatCalendarDate = function (dateTime) {
    return moment.utc(dateTime).format('LL')
}
Pang
  • 9,073
  • 146
  • 84
  • 117
AmGates
  • 2,041
  • 16
  • 29
7

With newer versions of moment.js you can also do this:

var dateTime = moment();

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

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

FlavorScape
  • 11,481
  • 11
  • 74
  • 115
7

Look at these Examples.

Format Dates

moment().format('MMMM Do YYYY, h:mm:ss a'); // December 7th 2020, 9:58:18 am
moment().format('dddd');                    // Monday
moment().format("MMM Do YY");               // Dec 7th 20
moment().format('YYYY [escaped] YYYY');     // 2020 escaped 2020
moment().format();                          // 2020-12-07T09:58:18+05:30

Relative Time

moment("20111031", "YYYYMMDD").fromNow(); // 9 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 8 years ago
moment().startOf('day').fromNow();        // 10 hours ago
moment().endOf('day').fromNow();          // in 14 hours
moment().startOf('hour').fromNow();       // an hour ago

Calendar Time

moment().subtract(10, 'days').calendar(); // 11/27/2020
moment().subtract(6, 'days').calendar();  // Last Tuesday at 9:58 AM
moment().subtract(3, 'days').calendar();  // Last Friday at 9:58 AM
moment().subtract(1, 'days').calendar();  // Yesterday at 9:58 AM
moment().calendar();                      // Today at 9:58 AM
moment().add(1, 'days').calendar();       // Tomorrow at 9:58 AM
moment().add(3, 'days').calendar();       // Thursday at 9:58 AM
moment().add(10, 'days').calendar();      // 12/17/2020

Multiple Locale Support

moment.locale();         // en
moment().format('LT');   // 9:58 AM
moment().format('LTS');  // 9:58:18 AM
moment().format('L');    // 12/07/2020
moment().format('l');    // 12/7/2020
moment().format('LL');   // December 7, 2020
moment().format('ll');   // Dec 7, 2020
moment().format('LLL');  // December 7, 2020 9:58 AM
moment().format('lll');  // Dec 7, 2020 9:58 AM
moment().format('LLLL'); // Monday, December 7, 2020 9:58 AM
moment().format('llll'); // Mon, Dec 7, 2020 9:58 AM
Ankit Kumar Rajpoot
  • 5,032
  • 1
  • 38
  • 28
6

Whenever I use the moment.js library I specify the desired format this way:

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

or

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

... etc I hope you get the idea

Inside the format function, you put the desired format. The example above will get rid of all unwanted elements from the date such as minutes and seconds

Adrian Grzywaczewski
  • 808
  • 1
  • 12
  • 24
5

For people like me want the long date format (LLLL) but without the time of day, there's a GitHub issue for that: https://github.com/moment/moment/issues/2505. For now, there's a workaround:

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
  • 6,304
  • 46
  • 57
  • 1
    Finally a sensible answer. Take my upvote sir! The issue hasn't been addressed yet it seems. – oyalhi Aug 01 '19 at 02:57
5

You can use this 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>
acucchieri
  • 552
  • 4
  • 8
4

Try this:

moment.format().split("T")[0]
Mohd
  • 5,370
  • 7
  • 18
  • 29
  • 1
    Watch out with this method, as `1993-06-07T22:00:00.000Z` will result as `1993-06-07` whereas it is the start of the day of `1993-06-08` – Tom Nov 20 '17 at 07:49
1

The thing is - you can run into an issue with timezones. For example, if you parse date like this: '2022-02-26T00:36:21+01:00' it may turn into '25/02/2022' As a solution if your date is in ISO format you can just cut off the time portion from the string, like this:

moment('2022-02-26T00:36:21+01:00'.split('T')[0]).utc().format('DD/MM/YYYY')

This solution is quite blunt, so be careful with string format.

-1

I am late, but this worked perfect for me:

moment().format('YYYY-MM-DD')

Aviv
  • 119
  • 11
-3
moment(date).format(DateFormat)

Here DateFormat should be DateFormat = 'YYYY-MM-DD'

Abhinav Kumar
  • 2,441
  • 1
  • 13
  • 25
  • Hello, welcome to SO. Consider making a [Tour](https://stackoverflow.com/tour) understand how to answer questions. Please, give more information about your solution and use Stack Snippet to show your code. – Diesan Romero Jul 05 '21 at 14:34