How can I remove time from date with Moment.js?
Asked Answered
C

18

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

Cowling answered 28/2, 2013 at 8:25 Comment(0)
P
788

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/

Percussionist answered 31/10, 2013 at 6:3 Comment(8)
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()Batrachian
Also be careful that this function actually mutates the original objectDiocesan
.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.Stakeout
To avoid mutating the original object, use someMoment.clone().startOf('day') or moment(someMoment).startOf('day').Nudism
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.Sclerotomy
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'); falseBleareyed
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:00Antihelix
@Sclerotomy 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 todayGabion
I
68

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
Imco answered 30/4, 2016 at 0:52 Comment(1)
See momentjs.com/docs/#/parsing/string-format for more formatting options.Asperse
G
47

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

Godding answered 1/3, 2017 at 17:7 Comment(0)
A
33

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/

Ahithophel answered 9/11, 2019 at 2:1 Comment(0)
A
11
formatCalendarDate = function (dateTime) {
    return moment.utc(dateTime).format('LL')
}
Admeasure answered 28/2, 2013 at 8:31 Comment(0)
S
11

You can also use this format:

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

Serpentine answered 4/1, 2017 at 7:54 Comment(0)
N
8

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

Nebulous answered 10/9, 2015 at 16:52 Comment(2)
Wouldn't it be date: dateTime.date() instead of day: dateTime.date()?Whiffen
'day and date key both mean day-of-the-month.' from the docs. day works pre version 2.8.4.Haul
X
8

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

Xanthous answered 16/10, 2017 at 9:42 Comment(4)
This is not a good idea if you ever want to display your content in different locales. If you want to display dates in the correct format for the user's locale, you need to use one of the preset date formats (L, LL, etc.)Barry
Why you set MMM three times.Ramonramona
MMM will give you the 3 first letters of the month. 'Apr' MMMM will give you a full month nameXanthous
Actually this is the best one if used with DD/MM/YYYY (two Ms) as this doesn't break when comparing dates with different locales, the other variants fail.Paige
B
8

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>
Bratcher answered 23/8, 2018 at 12:29 Comment(4)
Add some ore description hereCoopersmith
This is interesting! It's creating a moment and overriding hour, minutes and seconds but still keeping the underling date. Interesting because I would have guessed that moment({h:0, m:0, s:0, ms:0}) would have given me January 1 1970 rather than today.Clam
Also looks like moment({ h: 0 }) does the same.Clam
The docs say Omitted units default to 0 or the current date, month, and year.Clam
B
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);
Barry answered 2/4, 2018 at 21:58 Comment(1)
Finally a sensible answer. Take my upvote sir! The issue hasn't been addressed yet it seems.Housebreak
H
4

Try this:

moment.format().split("T")[0]
Hemotherapy answered 28/8, 2017 at 22:59 Comment(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-08Midwinter
Z
2

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.

Zanthoxylum answered 26/5, 2022 at 17:54 Comment(0)
T
1

This worked perfectly for me:

moment().format('YYYY-MM-DD')
Timepiece answered 4/5, 2021 at 5:12 Comment(0)
W
1

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>
Wastage answered 8/6, 2023 at 11:0 Comment(2)
As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.Konikow
You should add explanation.Splice
M
0

Try

new Date().toDateString() 

Result - "Fri Jun 17 2022"

Menthol answered 17/6, 2022 at 11:15 Comment(1)
Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.Meghan
B
0

This format works pretty fine

const date = new Date();
const myFormat= 'YYYY-MM-DD';

const myDate = moment(date, 'YYYYMMDDTHHmmss').format(myFormat);
Button answered 9/2, 2023 at 17:31 Comment(0)
C
0

use Like this

moment().format("dd")

outPut : "Tu"

Chole answered 29/3, 2023 at 12:32 Comment(0)
H
-3
moment(date).format(DateFormat)

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

Howzell answered 5/7, 2021 at 10:15 Comment(1)
Hello, welcome to SO. Consider making a Tour understand how to answer questions. Please, give more information about your solution and use Stack Snippet to show your code.Coroneted

© 2022 - 2024 — McMap. All rights reserved.