如何使用Moment.js从日期中删除时间?


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

它显示:“ 28 februari 2013 09:24”

但是,我想删除最后的时间。我怎样才能做到这一点?

我正在使用Moment.js


使用分割方法分隔字符串
AmGates

Answers:


605

抱歉,这么晚才进入,但是如果您要删除a的时间部分moment()而不是对其进行格式化,则代码为:

.startOf('day')

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


90
如果您要在时区之间切换(或者不注意时区),请务必谨慎。我遇到了一个问题,其中我的UTC日期已转换为本地时间,然后应用startOf('day'),这是一天的开始。固定于moment(moment.utc('2013-10-29T00:00:00+00:00').startOf('day').format('LL')).startOf('day').toDate()
colllin

26
还请注意,此功能实际上会改变原始对象
Dirk Boer

6
.startOf('day')不会删除时间部分本身,它只是将时间设置为00:00:00。因此,是的,正如“柯林”所评论的那样,保存日期时必须小心。更好的选择是使用format('LL'),正如该线程中已经回答的那样。
Sudarshan_SMD

4
为避免变异原始对象,请使用someMoment.clone().startOf('day')moment(someMoment).startOf('day')

注意,startOf('day')将重置所有内容,而不仅仅是将时间设置为00:00:00。moment().utc().add(1,'d').startOf('day')将对象重置为今天。
Tristan

49

format('LL')

根据您要使用的功能,format('LL')可以完成此操作。它产生如下内容:

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

26

正确的方法是根据您的要求指定输入,这将给您带来更大的灵活性。

本定义包括以下内容

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'

您可以使用其中任何一个,也可以更改传递到moment()。format()中的输入。例如,您可以通过moment.utc(dateTime).format('MMMM D, YYYY')


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

6

您也可以使用以下格式:

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


6

使用更新版本的moment.js,您还可以执行以下操作:

var dateTime = moment();

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

请参阅:http : //momentjs.com/docs/#/parsing/object/


那岂不是date: dateTime.date()不是day: dateTime.date()
philfreo

1
“日期和日期键均表示每月的某天。” 来自文档。day在2.8.4之前的版本中可用。
oldwizard

6

好吧,所以我知道我来晚了。大概晚了6年,但这是我需要弄清楚并将其格式化为YYYY-MM-DD的方式。

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

您也可以传入参数,例如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

每当我使用moment.js库时,都会以这种方式指定所需的格式:

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

要么

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

...等等,我希望你能明白

在格式功能内,放置所需的格式。上面的示例将删除日期中所有不必要的元素,例如分钟和秒


如果您想在不同的语言环境中显示内容,这不是一个好主意。如果你想在用户的语言环境的正确格式显示的日期,你需要使用的预设日期格式之一(LLL,等)
AJ理查森

为什么要设置MMM三次。
Menai Ala Eddine-阿拉丁

MMM将给您每月的前3个字母。“四月” MMMM会给你一个完整的月份名称
阿德里安Grzywaczewski

4

对于像我这样的人来说,想要长日期格式(LLLL)但又没有一天中的时间,则存在GitHub问题:https : //github.com/moment/moment/issues/2505。目前,有一种解决方法:

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
最后是一个明智的答案。带上我的长官!看来问题尚未解决。
oyalhi

3

您可以使用此构造函数

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>


在此处添加一些矿石描述
Mathews Sunny Sunny '18

这是有趣的!它创建了一个时刻,并且超越了小时,分钟和秒,但仍保留了下标日期。有趣,因为我猜想这moment({h:0, m:0, s:0, ms:0})会给我1970年1月1日而不是今天。
Simon_Weaver

看起来moment({ h: 0 })也一样。
Simon_Weaver

1
文档说Omitted units default to 0 or the current date, month, and year.
Simon_Weaver

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.