使用 Moment.js 格式化日期并减去天数

187

我想用Moment.js以DD-MM-YYYY的格式保存昨天的日期。所以如果今天是15-04-2015,我想减去一天,并得到14-4-2015

我已经尝试了一些组合,比如这样:

startdate = moment().format('DD-MM-YYYY');
startdate.subtract(1, 'd');

还有这个:

startdate = moment().format('DD-MM-YYYY').subtract(1, 'd');

还有这个:

startdate = moment();
startdate.subtract(1, 'd');
startdate.format('DD-MM-YYYY')

但我还是不明白...


你尝试过在格式化之前进行减法吗?仅仅对它进行格式化只会得到一个字符串... - ndugger
moment().subtract(10, "days") 而不仅仅是 "d" 可能吗? - leopik
将昨天的日期保存为日期,需要显示时将其转换为格式化字符串。 - Pointy
@NickDugger 我在那个问题中犯了一个错误,最后一次尝试应该在第一行写上 startdate = moment();。我已经编辑过了,谢谢。 - beaumondo
format()是将其转换为字符串的函数。您应该最后执行此操作。 - jwatts1980
你的第三个例子对我有效,但我使用的是 v2.7.0 版本。 - Jon Doe
7个回答

315

你遇到了多个奇怪的问题。第一个问题已经在你的帖子中进行了编辑,但它与方法被调用的顺序有关。

.format返回一个字符串。字符串没有subtract方法。

第二个问题是你减去了一天,但实际上没有将其保存为变量。

因此,你的代码应该像这样:

var startdate = moment();
startdate = startdate.subtract(1, "days");
startdate = startdate.format("DD-MM-YYYY");

然而,您可以将它们链接在一起; 这看起来像:

var startdate = moment().subtract(1, "days").format("DD-MM-YYYY");

区别在于我们将startdate设为您对startdate所做更改的结果,因为moment是破坏性的。


14
moment.js的subtract实际上是破坏性的。"通过减去时间来改变原始时刻。"请参见此处:http://momentjs.com/docs/#/manipulating/subtract/。 - docksteaderluke

24
var date = new Date();

var targetDate = moment(date).subtract(1, 'day').toDate(); // date object

现在,您可以格式化日期的显示方式,或者将此日期与其他日期进行比较等。

toDate() 函数是关键点。


16
startdate = moment().subtract(1, 'days').format('DD-MM-YYYY');

7

试试这个:

var duration = moment.duration({'days' : 1});
moment().subtract(duration).format('DD-MM-YYYY');

这将给你 14-04-2015 - 今天是15-04-2015

或者,如果你的momentjs版本低于2.8.0,你可以使用:

startdate = moment().subtract('days', 1).format('DD-MM-YYYY');

不要这样写:

startdate = moment().subtract(1, 'days').format('DD-MM-YYYY');

6
在AngularJS中,moment="^1.3.0"
moment('15-01-1979', 'DD-MM-YYYY').subtract(1,'days').format(); // 14-01-1979

或者

moment('15-01-1979', 'DD-MM-YYYY').add(1,'days').format(); // 16-01-1979

4
startdate = moment().subtract(1, 'days').startOf('day')

3

我认为你在最后一次尝试中已经掌握了它,你只需要在Chrome的控制台中获取字符串..

startdate = moment();
startdate.subtract(1, 'd');
startdate.format('DD-MM-YYYY');
"14-04-2015"

startdate = moment();
startdate.subtract(1, 'd');
myString = startdate.format('DD-MM-YYYY');
"14-04-2015"
myString
"14-04-2015"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接