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

Posted

技术标签:

【中文标题】使用 Moment.js 格式化日期并减去天数【英文标题】:Format date and Subtract days using Moment.js 【发布时间】:2015-06-21 12:11:04 【问题描述】:

我想要一个使用 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')

但我没听懂...

【问题讨论】:

格式化前有没有试过减法?格式化它只会给你一个字符串...... moment().subtract(10, "days") 而不是 "d" 也许吧? “保持”昨天的日期为日期,当需要显示时转成格式化字符串。 @NickDugger 我在那个问题上犯了一个错误,最后一次尝试应该说 startdate = moment();在第一行。我已经编辑了,谢谢 format() 是使它成为字符串的函数。你应该最后这样做。 【参考方案1】:

你有多个奇怪的事情发生。第一个已在您的帖子中进行了编辑,但它与调用方法的顺序有关。

.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.js subtract 实际上是具有破坏性的。 “通过减去时间来改变原始时刻”。见这里:momentjs.com/docs/#/manipulating/subtract【参考方案2】:
startdate = moment().subtract(1, 'days').format('DD-MM-YYYY');

【讨论】:

【参考方案3】:
var date = new Date();

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

现在,您可以格式化您希望如何查看此日期,或者您可以将此日期与另一个日期进行比较等。

toDate()函数才是重点。

【讨论】:

【参考方案4】:

试试这个:

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

【讨论】:

【参考方案5】:

我认为你在最后一次尝试中已经成功了,你只需要在 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"

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

在 angularjs moment="^1.3.0"

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



【讨论】:

以上是关于使用 Moment.js 格式化日期并减去天数的主要内容,如果未能解决你的问题,请参考以下文章

格式化日期与moment.js

Moment.js 包含中间日期格式的文本

如何使用 moment.js 添加天数,不包括周末?

Moment.js“无效日期”

Moment.js 中的 DD/MM/YYYY 日期格式

使用 SORT 从日期中减去天数