在猫鼬模式的默认日期值中将月份添加到当前日期

xam*_*mir 4 javascript date mongoose mongodb node.js

我们有一个像这样的猫鼬模式:

var sampleSchema = new Schema({
    fieldABC: String,
    expireAfter1Month:{
        type: Date,
        default: new Date() + 1 month
    }
});
Run Code Online (Sandbox Code Playgroud)

的默认值expireAfter1Month应设置为一个月后的日期值。

我有这些:

如何在猫鼬模式的默认日期值中将月份添加到当前日期?

也许我可以这样做

default: +new Date() + 30*24*60*60*1000
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有更好/优化的方法?

Jar*_*a X 5

基于您发布的链接之一的答案

/sf/answers/2136798331/

var minuteFromNow = function(){
    var timeObject = new Date();
    timeObject.setTime(timeObject.getTime() + 1000 * 60);
    return timeObject;
};

new Schema({
    date: { type: Date, default: minuteFromNow }
})
Run Code Online (Sandbox Code Playgroud)

例如,如果您想要从 1 月 29 日/30 日/31 日到 2 月 28 日的一个月(当然闰年为 29 日),以及从 3 月 31 日、5 月、8 月或 10 月到 4 月 30 日、6 月、9 月的一个月和十一月分别,那么你需要多一点逻辑

就像是

function oneMonthFromNow() {
    var d = new Date();
    var targetMonth = d.getMonth() + 1;
    d.setMonth(targetMonth);
    if(d.getMonth() !== targetMonth % 12) {
        d.setDate(0); // last day of previous month
    }
    return d;
}
new Schema({
    date: { type: Date, default: oneMonthFromNow}
})
Run Code Online (Sandbox Code Playgroud)

为了说明这将如何处理月末,以下是相同的代码,除了d传入的任意日期,而不是使用now- 来显示这是如何工作的

var minuteFromNow = function(){
    var timeObject = new Date();
    timeObject.setTime(timeObject.getTime() + 1000 * 60);
    return timeObject;
};

new Schema({
    date: { type: Date, default: minuteFromNow }
})
Run Code Online (Sandbox Code Playgroud)

您的评论(在我发布此答案后添加:p)建议从 1 月 31 日开始的一个月应该是 3 月 2 日,即始终只添加 30 天,在这种情况下,您自己的建议

new Schema({
    date: { type: Date, default: +new Date() + 30*24*60*60*1000}
})
Run Code Online (Sandbox Code Playgroud)

将是理想的